自定义构造方法
在 静态方法 一节当中我们已经提到它们可以作为从不同数据构造枚举的方便形式。在之前的例子里也展示过,对出版社经常误用的苹果设备名返回正确的名字:
enum Device {
case AppleWatch
static func fromSlang(term: String) -> Device? {
if term == "iWatch" {
return .AppleWatch
}
return nil
}
}
我们也可以使用自定义构造方法来替换静态方法。枚举与结构体和类的构造方法最大的不同在于,枚举的构造方法需要将隐式的 self
属性设置为正确的 case
。
enum Device {
case AppleWatch
init?(term: String) {
if term == "iWatch" {
self = .AppleWatch
}
return nil
}
}
在这个例子中,我们使用了可失败(failable)的构造方法。但是,普通的构造方法也可以工作得很好:
enum NumberCategory {
case Small
case Medium
case Big
case Huge
init(number n: Int) {
if n < 10000 { self = .Small }
else if n < 1000000 { self = .Medium }
else if n < 100000000 { self = .Big }
else { self = .Huge }
}
}
let aNumber = NumberCategory(number: 100)
print(aNumber)
// prints: "Small"
网友评论