// Playground - noun: a place where people can play import UIKit // 枚举语法 enum SomeEnumeration { // enumeration definition goes here } // 定义一个枚举 enum CompassPoint { case North case South case East case West } // 声明枚举时,并不会像C/OC那样为枚举成员赋默认值 // 多个枚举成员出现在一行用逗号隔开 enum Planet { case Mercury, Venus, Earth, Mars } var directionHead = CompassPoint.West // 变量directionHead现在已知为CompassPoint类型,再次赋值时可以省略枚举类型 directionHead = .South // 通过Switch匹配枚举值 switch directionHead { case .North: println("north") case .South: println("south") case .West: println("west") case .East: println("east") default: break } // 关联值 Associated Values enum BarCode { case UPCA(Int, Int, Int, Int) // UPCA 类型为(Int, Int, Int, Int) case QRCode(String) // QRCode 类型为 (String) } var productCode = BarCode.UPCA(8, 890, 89, 99) productCode = .QRCode("ABCDEFG") // 提取关联值 使用let还是var根据case语句内的使用情况决定 switch productCode { case .UPCA(let a1, let a2, let a3, let a4): println("UPCA:(a1)-(a2)-(a3)-(a4)") case .QRCode(let s1): println("QRCode:(s1)") default: break } // 原始值 Raw Values enum ASCIIControlCharacter: Character { case Tab = " " case LineFeed = " " case CarriageReturn = " " } // 注意:原始值和关联值是不同的。对于一个特性的枚举成员,它的原始值始终是定义枚举时预设的值,而关联值当你通过一个枚举成员创建变量或者常量时会被设置,每一次都可以不一样 // 当整数[ntegers]被用于初始化原始值时,如果其它成员没有特别指定初始值,原始值将会自增 enum SomePlanet: Int { case Mercury = 1, Venus, Earth, Mars, Jupiter, Santurn, Uranus, Neptune } // 通过rawValue属性访问枚举成员 let earthsOrder = SomePlanet.Earth.rawValue // 通过原始值初始化实例 let possiblePlanet = SomePlanet(rawValue: 7) // 返回值为optional?