import Foundation

 /*
枚举 语法结构
enum 类型 {
case 值
}
*/
//定义一个枚举 写法1
enum LiuShiQun {
case Name
case Age
case Sex
case Add
case Sub
case Mul
case Div
}
//定义一个枚举 写法2
enum LiuShiQun_1 {
case Add,Sub
case Mul
case Div
}
//定义一个枚举变量 写法1
let enum_Name: LiuShiQun = .Name
//定义一个枚举变量 写法2
let enum_Age: LiuShiQun = LiuShiQun.Age
// 定义枚举变量 写法3
let enum_Add = LiuShiQun_1.Add //与switch结合 将闭包的各种方式加入到方法里
//匹配的时候,如果不将枚举对所有值都case出来,switch会报错 否则末尾添加default
func chooseMethod(op: LiuShiQun_1) ->(Double,Double) -> Double {
switch op {
case .Add:
func add(a: Double,b: Double) -> Double {
return a+b
}
return add
case .Sub:
return {(a: Double,b: Double) -> Double in return a - b}
case .Mul:
return {return $ * $}
case .Div:
return {$ / $}
default :
return{$ + $}
}
}
//声明一个对象 调用方法,传递枚举的值 得到一个闭包类型的值
let val_1 = chooseMethod(.Mul)
//调用val_1闭包
let value_2 = val_1(,)
println(value_2) /*
枚举原始值定义
enum Lsq: Int {
case Add,Sub,Mul,Div
}
不指定值的话,从0开始,依次 +1
Lsq.Add.toRaw() 得到Lsq.Add的原始值 - 对应 fromRaw 将值反推 将原始值转为枚举值
Lsq.Add.rawValue 得到Lsq.Add的原始值 enum Lsq_1: Int {
case Add=0,Sub=1,Mul=3,Div=4
} enum Lsq_2: String {
case Add="add",Sub="sub",Mul="mul",Div="div"
}
*/ enum Lsq_1: Int {
case Add=,Sub,Mul,Div
}
println(Lsq_1.Add.rawValue)
enum Lsq_2: String {
case Add="add",Sub="sub",Mul="mul",Div="div"
}
println(Lsq_2.Add.rawValue) let op : Lsq_2? = Lsq_2(rawValue: "add")
println(op)
//字符串转枚举值
func get_enums(str: String) {
let new_op : Lsq_2? = Lsq_2(rawValue: str)
if var temp_op = new_op {
switch temp_op {
case .Add:
println("Add")
case .Div:
println("Div")
case .Mul:
println("Mul")
case .Sub:
println("Sub")
default :
println("error: \(str)")
}
}
else {
println("no")
}
}
get_enums("adds") //枚举相关值
//两个值关联枚举值
enum LineSegmentDescriptor {
case StartAndEndPattern(start : Double,end : Double)
case StartAndLengPattern(start : Double,length : Double)
}
//定义一个变量 指定枚举值的两个关联值
var lsd = LineSegmentDescriptor.StartAndEndPattern(start: , end: )
lsd = LineSegmentDescriptor.StartAndLengPattern(start: , length: )
//将值提取出来
switch lsd {
//case let .StartAndEndPattern( s, e)://switch 值绑定模式
case .StartAndEndPattern(let s,let e)://switch 值绑定模式
println("开始\(s) 结束\(e)")
case .StartAndLengPattern(let s,let e)://switch 值绑定模式
println("开始\(s) 结束\(e)")
}
 

初学swift笔记 枚举(七)的更多相关文章

  1. 初学swift笔记 结构体(八)

    import Foundation /* 和类很相似 结构体 -> 封装 属性.方法 结构体是值类型 */ //定义一个LSQ类型的结构体 关键字struct struct LSQ { var ...

  2. 初学swift笔记 方法(九)

    import Foundation /* 方法 */ //实例方法 一定需要依附于对象 class MyPoint { var x: Double = 0.0 var y: Double = 0.0 ...

  3. 初学swift笔记-数组、字典、元组(三)

    数组的使用.字典的使用.元组的使用 import Foundation //1.定义数组 //集合数据 数组.字典 ,,,]//常用定义 ,,,]//常用定义 ,,,]//范型定义 ,,,] arr_ ...

  4. 初学swift笔记运算符(二)

    swift 中的运算符 import Foundation //字符类型 var char: Character = "a" char="b" println( ...

  5. 初学swift笔记变量的定义(一)

    swift变量的定义 1 import Foundation /* 变量的定义 变量的类型是可以不用写的 var a=10 常量的定义 let修饰 */ print(a) let b= print(b ...

  6. 初学swift笔记 继承(十)

    import Foundation /* 继承 class childClass: FatherClass{ } 优点 代码重用 缺点 增加程序的藕合度 父类的改变会影响子类 只能单继承 */ cla ...

  7. 初学swift笔记 函数(六)

    import Foundation /* func 函数名 (参数名:参数类型) { } func 函数名 (参数名:参数类型) ->Void{ } func 函数名 (参数名:参数类型) -& ...

  8. 初学swift笔记 流程控制(五)

    import Foundation ; i<=; i++ { println(i) } let str1="adl;fjasdfl;ouewrouqwperuadf" for ...

  9. 初学swift笔记字典、数组(四)

    import Foundation //字典 元素顺序是无序的 //1.字典元素是键值对 (key:value) //key 一定是可哈希的 string\int\bool var dic1=[&qu ...

随机推荐

  1. js去除左右空格

     replace方法去掉字符串的空格 //去左空格; s=s.replace(/(^\s*)/g, ""); //去右空格; s= s.replace(/(\s*$)/g, &qu ...

  2. socket浅谈

    1什么是socket? socket的英文原义是“孔”或“插座”.作为进程通信机制,取后一种意思. 通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄. (其实就是两个程序通信用的.)是 ...

  3. BZOJ 2875 随机数生成器

    http://www.lydsy.com/JudgeOnline/problem.php?id=2875 题意:给出mod,a,c,g,x0,n,xn=(a*xn-1+c)%mod,求xn%g 求A* ...

  4. Keil C51 与 ARM 并存的方法

    很多朋友都在想,怎么让keil C51与ARM能够并存使用.有安装经验的朋友都知道,安好C51后再安ARm,C51不能正常工作:安好ARM后再安C51,ARM不能正常工作. 网上也有相关解决办法,不过 ...

  5. Spring Boot 配置优先级顺序

    一般在一个项目中,总是会有好多个环境.比如: 开发环境 -> 测试环境 -> 预发布环境 -> 生产环境 每个环境上的配置文件总是不一样的,甚至开发环境中每个开发者的环境可能也会有一 ...

  6. 关于oracle动态视图v$datafile和v$datafile_header(转)

    v$datafile是从oracle的控制文件中获得的数据文件的信息v$datafile_header是从数据文件的头部在正常运行下,两者的检查点SCN值是一致的,但当datafile出现损坏时可以用 ...

  7. Eclipse调试Bug的七种常用技巧(转)

        注意事项及小结: (1)Line Breakpoint:如果设置Conditional,监控的变量需要比当前行高一级block,譬如for(int i=0;i<20;i++)中的i,fo ...

  8. vue.js的devtools安装

    安装 1.github下载地址:https://github.com/vuejs/vue-devtools 2.下载好后进入vue-devtools-master工程  执行npm install - ...

  9. python2 和3的区别

    __future__ 模块 Python 3.x引入一些Python2不兼容的关键字和函数,可以通过在 Python2 内置的模块 __future__ 导入.建议如果你想在代码中支持 Python3 ...

  10. Android开发最佳学习路线图

          为了帮助大家更好的学习Android开发的相关知识,尚观4G智能操作系统研究室(www.up4g.com)为大家制作下面学习路线图:希望能帮助到广大的android爱好者. 在開始之前我们 ...