一、前言
枚举是为一组相关值定义的一个通用类型,Swift 枚举的功能非常强大,使它比 OC 的枚举应用于更广泛的场景。
在本文,我们去了解 enum 的语法和能力。
二、枚举语法
使用 enum 关键字引入枚举,其整个定义放在一对大括号内:
enum CompassPoint {
case north
case south
case east
case west
}
与 C 和 Objective-C 不同,Swift 的枚举成员在创建时不会被赋予一个默认的整型值。
三、枚举成员遍历
令枚举遵循 CaseIterable 协议,Swift 会生成一个 allCases 属性,用于返回枚举中所有成员的集合。
enum Beverage : CaseIterable {
case coffee, tea, juice
}
for beverage in Beverage . allCases {
print ( beverage)
}
关联值
关联值是将附加信息附加到枚举成员的一种非常好的方式。Swift 枚举可以存储任意类型的关联值,例子如下:
enum Barcode {
case upc ( Int , Int , Int , Int )
case qrCode ( String )
}
上面的代码定义一个名为 Barcode 的枚举类型,其中一个成员 upc 具有(Int, Int, Int, Int) 类型的关联值,另一个成员 qrCode 具有 String 类型的关联值。可以通过模式匹配来访问关联值,例子如下:
var productBarcode = . qrCode ( "ABCDEFGHIJKLMNOP" )
switch productBarcode {
case let . upc ( numberSystem, manufacturer, product, check) :
print ( "UPC: \( numberSystem) , \( manufacturer) , \( product) , \( check) ." )
case let . qrCode ( productCode) :
print ( "QR code: \( productCode) ." )
}
四、原始值
枚举成员可以被默认值预填充,这些默认值被称为原始值,注意:原始值的类型必须相同。
enum ASCIIControlCharacter : Character {
case tab = "\t"