目录:
- 基本语法
- 关联值
- 原始值
枚举为一组相关的值定义了一个共同的类型。
・可以给枚举成员指定原始值类型:字符串,字符,整型值或浮点数等
・枚举成员可以指定任意类型的关联值存储到枚举成员中
・枚举可以定义构造函数和遵循协议
・枚举是值类型
基本语法
enum CompassPoint { case north case south case east case west } // 多个成员值可以出现在同一行上 enum Planet { case mercury, venus, earth, mars, jupiter, saturn, uranus, neptune } var directionToHead = CompassPoint.west // 定义枚举变量并赋值 directionToHead = .east // 给已知类型的枚举变量赋值 // 在switch中使用枚举 let somePlanet = Planet.earth switch somePlanet { case .earth: print("Mostly harmless") default: print("Not a safe place for humans") }
关联值
可以给枚举定义任意类型的关联值,每个关联值类型可以各不相同。
enum Barcode { case upc(Int, Int, Int, Int) case qrCode(String) } var productBarcode = Barcode.upc(8, 85909, 51226, 3) // 分配条形码 productBarcode = .qrCode("ABCDEFGHIJKLMNOP") // 同样可以赋值二维码 // 提取枚举关联值 switch productBarcode { case .upc(let numberSystem, let manufacturer, let product, let check): print("UPC: (numberSystem), (manufacturer), (product), (check).") case .qrCode(let productCode): print("QR code: (productCode).")。// 打印输出 } // 枚举成员的所有关联值都被提取为常量或变量,使用let或var switch productBarcode { case let .upc(numberSystem, manufacturer, product, check): print("UPC: (numberSystem), (manufacturer), (product), (check).") case let .qrCode(productCode): print("QR code: (productCode).") }
原始值
原始值不同于关联值,原始值是在定义枚举时被预先填充的固定不变的值,关联值是在创建枚举常量或变量时才设置的可变更的值。
// 首元素原始值赋值1,其后元素值依次递增 enum Planet: Int { case mercury = 1, venus, earth, mars, jupiter, saturn, uranus, neptune } // CompassPoint.south 拥有隐式原始值 south enum CompassPoint: String { case north, south, east, west } // 使用枚举成员rawValue属性可以访问其原始值 let earthsOrder = Planet.earth.rawValue // 使用枚举原始值创建可选枚举常量 let possiblePlanet = Planet(rawValue: 7) // possiblePlanet 类型为 Planet? 值为 Planet.uranus