Swift面向对象基础(上)——Swift中的枚举
Swift中枚举
学习笔记来自《极客学院》
1 import Foundation 2 3 /**********1*Swift定义枚举的语法格式*************/ 4 /* 5 enum 枚举名 { 6 使用case关键字列出所有枚举值 7 枚举的其他成员 8 } 9 */ 10 //定义枚举 11 enum Season{ 12 case Spring 13 case Summer 14 case Fall 15 case Winter 16 } 17 //使用一个case列举所有的值 18 enum Season2{ 19 case Spring,Summer,Fall,Winter 20 } 21 //使用枚举声明变量 22 var weather : Season//这里就是声明一个Season 类型的变量weather 23 weather = .Summer//或者是:weather = Season.Summer 24 println("1:\(weather)") 25 26 var enum_1 = Season.Winter//直接用类型推断也可以 27 switch(enum_1){ 28 case .Spring: 29 println(Season.Spring) 30 case .Summer: 31 println(Season.Summer) 32 default: 33 println("在家里") 34 }//switch中的case没有覆盖枚举的所有值,必须添加default语句,也就是说如果列出了枚举所有的值,就可以删掉default语句了 35 36 37 /**********2*原始值*************/ 38 /* 39 enum 枚举值 : 原始值类型{ 40 case 枚举值 = 原始值 41 } 42 */ 43 enum Weekday : Int{ 44 case Mon,Tur,Wen = 4,Thur,Fri,Sat,Sun 45 }//因为这里都是整形所以会自动推断他们分别是1~7 46 println(Weekday.Wen)//不知道结果为甚是这样的:(Enum Value) 47 48 //所以获取枚举的 原始值 49 println(Weekday.Mon.rawValue) 50 println(Weekday.Tur.hashValue) 51 52 enum Season3 : Character{ 53 case Spring = "春" 54 case Summer = "夏" 55 case Fall = "秋" 56 case Winter = "冬" 57 }//但是上面类型的推断仅仅局限在整型的情况下,swift会自动推断 58 59 //根据原始值来获取枚举值,调用的事构造器,这个构造器是可选类型:init?(rawValue:) 60 var mySeason = Season3(rawValue: "秋") 61 if mySeason != nil{ 62 switch(mySeason!){//需要间接解包 63 case .Spring: 64 println("春天不是读书天") 65 case .Summer: 66 println("夏天炎炎正好呢") 67 case .Fall,.Winter: //这里表示“或” 68 println("秋多蚊蝇冬日冷") 69 default: 70 println("读书只好等明年") 71 } 72 } 73 74 75 /**********3*关联值*************/ 76 //在每个枚举值后面添加括号扩起来的关联值,然后关联值个数是0~多个,然后定义类型值,当然也可以仅仅只有类型,不需要关联值名称 77 enum Planet { 78 case Earth(weight: Double,name: String) 79 case Mars(density: Double,name:String,weight:Double) 80 case Venus(Double,String) 81 case Saturn 82 case Neptune 83 }//其实这后面括号扩起来的就是元祖 84 //获取枚举值,系统还会自动提示,这个操作一下就能明白了 85 var p1 = Planet.Earth(weight: 23, name: "hah") 86 //接下来就是得到这些关联值,要得到这些关联值,就要声明额外的变量 87 //但是下面直接用的是switch语句 88 switch(p1){ 89 case Planet.Earth(var weight,var name): 90 println("\(name)~~~~~~~~~\(weight)") 91 case let Planet.Mars(density:d,name:n,weight:dou): 92 println("\(d)") 93 default: 94 break 95 }