初學swift筆記 枚舉(七)

 

  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 }

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章