在 Swift 中,我很常用到列舉這個功能,當然有時值不一定會在我們列舉的範圍,這時我們可以使用 optional initialization 的方式來實現。
![[Swift] optional initialization 的方法 1 swift 1](https://www.inote.tw/wp-content/uploads/2020/02/swift-1.png)
以下列例子為例,我們知道蘋果的晶片有 M1 ~ M3,也因此我們先寫成這樣,比較注意的是 init 必須變成 init?,其中當傳進去的參數不是 M1 ~ M3 時,我們就回傳 nil
enum AppleChipType {
case M1
case M2
case M3
init?(chip: String?) {
switch chip {
case "M1": self = .M1
case "M2": self = .M2
case "M3": self = .M3
default: return nil
}
}
}
而這時如果我們將 M4 帶進去,AppleChipType 會回傳 nil 喔!
let appleChip = "M4"
let appleChipType = AppleChipType(chip: appleChip)
// appleChipType = nil
但是如果你將 M3 帶入,則會回傳 AppleChipType.M3
let appleChip = "M3"
let appleChipType = AppleChipType(chip: appleChip)
// appleChipType = AppleChipType.M3
optional initialization 這個方法不只 enum 適用,struct / class 等也都適用喔!