1、基本用法
//enum direction { // case north // case south // case west // case east //} 等價於下面寫法 enum direction { case north,south,west,east } var dir = direction.north dir = .south dir = direction.west //print(dir) switch dir { case .south : print("south") case .north : print("north") case .east : print("east") case .west : print("west") } //輸出 west
2、關聯值 (associated Values )
enum score { case point (Int) case grade (Character) } var sc = score.point(10) sc = .grade("A") //print(sc) switch sc { case let .point(i): print("分數\(i)") case let .grade(i): print("等級\(i)") } //輸出 等級A enum date{ case ymd (Int,Int,Int) case string (String) } var d = date.ymd(2005, 8, 8) //d = .string("2008-8-8") switch d { case let .string(i): print("sting時間\(i)") case let .ymd(a, b, c): // .ymd(let a,let b,let c): print("時間\(a)-\(b)-\(c)") } //時間2005-8-8 輸出
3、原始值 rawValue
enum grade :String{ case perfect = "A" case great = "B" case good = "C" case bad = "D" } print(grade.perfect.rawValue) //A print(grade.great.rawValue)//B print(grade.good.rawValue)//C print(grade.bad.rawValue)//D
隱式原始值
//t如果枚舉初始值類型為int \ String Swift 會為其自動分配原始值 enum time :Int { //默認值 0 1 2 case morning , afternoon ,evening } print(time.afternoon.rawValue) // 1 enum direction : String { //默認值就是當前字符串 case north,south,west,east }
4、遞歸枚舉
indirect enum mathExpor{ case num(Int) case sum(mathExpor,mathExpor) case difference(mathExpor,mathExpor) } let one = mathExpor.num(8) let two = mathExpor.num(5) let three = mathExpor.num(3) let sum = mathExpor.sum(one, two) let difference = mathExpor.difference(sum, three) func calcute (_ math:mathExpor )->Int{ switch math { case let .num(i): return i case let .sum(i, j): return calcute(i)+calcute(j) case let .difference(i, j): return calcute(i)-calcute(j) } } print(calcute(difference)) //10
5、MemoryLayout 獲取數據類型占用的內存大小
enum passWord{ case num(Int,Int,Int,Int) // int 8字節 * 4 = 32 case string // 分配一個字節 } print(MemoryLayout<passWord>.stride) //40 分配占用空間大小 print(MemoryLayout<passWord>.size) //33 實際占用空間大小 print(MemoryLayout<passWord>.alignment) //8 對齊參數 var pwd = passWord.string print(MemoryLayout.size(ofValue: pwd)) // 33 print(MemoryLayout.stride(ofValue: pwd)) //40 print(MemoryLayout.alignment(ofValue: pwd)) //8 pwd = .num(100, 1, 2, 40) print(MemoryLayout.size(ofValue: pwd)) // 33 print(MemoryLayout.stride(ofValue: pwd)) //40 print(MemoryLayout.alignment(ofValue: pwd)) //8