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 }