在 Swift 中,枚举的作用不仅仅是定义一组常量或提高程序的可读性了,它还具有面向对象特性。
首先枚举定义的成员值不再是一个具体的数值类型,而就是所定义的枚举类型。
enum MobilePhoneOS {
case iOS, Android
}
let myPhoneOS = MobilePhoneOS.iOS
print(type(of: myPhoneOS)) // MobilePhoneOS
当我们需要为每个成员提供某个具体类型的默认值时,可以为枚举类型提供原始值(rawValue)声明,这些原始值类型可以是字符,字符串,整型和浮点型等。
enum MobilePhoneOS: Int {
case iOS = 0, Android
}
let myPhoneOS = MobilePhoneOS.Android
print(myPhoneOS.rawValue) // 1
还有一种枚举声明,其成员值可关联一个元组类型,在生成实例时赋值。
enum Code {
case BarCode(Int, Int, Int)
case QRCode(String)
}
func scan(_ code: Code) {
switch code {
case let .BarCode(number, identifier, check):
print("BarCode with value of \(number), \(identifier), \(check).")
case let .QRCode(string):
print("QRCode with value of \(string).")
}
}
let barCode = Code.BarCode(1, 2, 3)
let QRCode = Code.QRCode("123")
scan(barCode) // BarCode with value of 1, 2, 3.
scan(QRCode) // QRCode with value of 123.
因为具有面向对象的特性,Swift 中的枚举类型还可以添加实例方法和静态方法。