1 import Foundation 2 3 /* 4 枚举 5 6 语法结构 7 enum 类型 { 8 case 值 9 } 10 */ 11 //定义一个枚举 写法1 12 enum LiuShiQun { 13 case Name 14 case Age 15 case Sex 16 case Add 17 case Sub 18 case Mul 19 case Div 20 } 21 //定义一个枚举 写法2 22 enum LiuShiQun_1 { 23 case Add,Sub 24 case Mul 25 case Div 26 } 27 //定义一个枚举变量 写法1 28 let enum_Name: LiuShiQun = .Name 29 //定义一个枚举变量 写法2 30 let enum_Age: LiuShiQun = LiuShiQun.Age 31 // 定义枚举变量 写法3 32 let enum_Add = LiuShiQun_1.Add 33 34 //与switch结合 将闭包的各种方式加入到方法里 35 //匹配的时候,如果不将枚举对所有值都case出来,switch会报错 否则末尾添加default 36 func chooseMethod(op: LiuShiQun_1) ->(Double,Double) -> Double { 37 switch op { 38 case .Add: 39 func add(a: Double,b: Double) -> Double { 40 return a+b 41 } 42 return add 43 case .Sub: 44 return {(a: Double,b: Double) -> Double in return a - b} 45 case .Mul: 46 return {return $0 * $1} 47 case .Div: 48 return {$0 / $1} 49 default : 50 return{$0 + $1} 51 } 52 } 53 //声明一个对象 调用方法,传递枚举的值 得到一个闭包类型的值 54 let val_1 = chooseMethod(.Mul) 55 //调用val_1闭包 56 let value_2 = val_1(4,7) 57 println(value_2) 58 59 /* 60 枚举原始值定义 61 enum Lsq: Int { 62 case Add,Sub,Mul,Div 63 } 64 不指定值的话,从0开始,依次 +1 65 Lsq.Add.toRaw() 得到Lsq.Add的原始值 - 对应 fromRaw 将值反推 将原始值转为枚举值 66 Lsq.Add.rawValue 得到Lsq.Add的原始值 67 68 69 enum Lsq_1: Int { 70 case Add=0,Sub=1,Mul=3,Div=4 71 } 72 73 enum Lsq_2: String { 74 case Add="add",Sub="sub",Mul="mul",Div="div" 75 } 76 */ 77 78 enum Lsq_1: Int { 79 case Add=0,Sub,Mul,Div 80 } 81 println(Lsq_1.Add.rawValue) 82 enum Lsq_2: String { 83 case Add="add",Sub="sub",Mul="mul",Div="div" 84 } 85 println(Lsq_2.Add.rawValue) 86 87 let op : Lsq_2? = Lsq_2(rawValue: "add") 88 println(op) 89 //字符串转枚举值 90 func get_enums(str: String) { 91 let new_op : Lsq_2? = Lsq_2(rawValue: str) 92 if var temp_op = new_op { 93 switch temp_op { 94 case .Add: 95 println("Add") 96 case .Div: 97 println("Div") 98 case .Mul: 99 println("Mul") 100 case .Sub: 101 println("Sub") 102 default : 103 println("error: (str)") 104 } 105 } 106 else { 107 println("no") 108 } 109 } 110 get_enums("adds") 111 112 //枚举相关值 113 //两个值关联枚举值 114 enum LineSegmentDescriptor { 115 case StartAndEndPattern(start : Double,end : Double) 116 case StartAndLengPattern(start : Double,length : Double) 117 } 118 //定义一个变量 指定枚举值的两个关联值 119 var lsd = LineSegmentDescriptor.StartAndEndPattern(start: 1, end: 10) 120 lsd = LineSegmentDescriptor.StartAndLengPattern(start: 1, length: 9) 121 //将值提取出来 122 switch lsd { 123 //case let .StartAndEndPattern( s, e)://switch 值绑定模式 124 case .StartAndEndPattern(let s,let e)://switch 值绑定模式 125 println("开始(s) 结束(e)") 126 case .StartAndLengPattern(let s,let e)://switch 值绑定模式 127 println("开始(s) 结束(e)") 128 }