初学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 }

 

 
posted @ 2015-10-25 16:17  童心少年  阅读(224)  评论(0编辑  收藏  举报