[Swift] optional initialization 的方法

在 Swift 中,我很常用到列舉這個功能,當然有時值不一定會在我們列舉的範圍,這時我們可以使用 optional initialization 的方式來實現。

swift 1

以下列例子為例,我們知道蘋果的晶片有 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 等也都適用喔!

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments