Swift 個人學習筆記 – 07: 列舉

NO IMAGE
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

本文章純粹是中文版《The Swift Programming Language》的學習筆記,所以絕大部分的內容都是文中有的。本文是本人的學習筆記,不是正式系統的記錄。僅供參考

以下還是有很多沒看懂、不確定的地方,我會以“存疑”的註解指出。

在此感謝中文版翻譯者,這極大地加快了 Swift 的學習速度。

本文地址:https://segmentfault.com/a/1190000008627744


Reference:

原版:The Swift Programming Language
中文版:Swift 3 程式語言 – 列舉

列舉

Swift 中的列舉不需要對應真實的值。列舉的值可以是 String, Character, Integer, Float等型別。同時,列舉中的一個值可以與多個型別相關聯起來。

基本語法:

    enum CompassDirection {
case north
case south
case east
case west
}

初始化和賦值:

    var dirToHead = CompassDirection.west
dirToHead = .east

注意值處理都需要在前面加上 “.”。這裡實際上是隱式省略了 “CompassDirection”。

需要注意的是,如果將 enum 用在 switch 語句中,需要全覆蓋所有的值。

關聯值

    enum Barcode {
case upc(Int, Int, Int, Int)
case qrCode(String)
}

上面這段語法的意思是:定義一個叫做 Barcode 的數值型別,它要麼用 (Int, Int, Int, Int) 型別的關聯值擷取 upc 值,要麼使用 String 型別的關聯值街區一個 qrCode 值。

賦值:

    var productBarcode = Barcode.upc(8, 85907, 51226, 3)
productBarcode = .qrCode("ABCDEFG")

Swift 寫法:

    switch productBarcode {
case .upc(let numberSystem, let manufacturer, let product, let check):
print("UPC: \(numberSystem), \(manufacturer), \(product), \(check).")
case .qrCode(let productCode):
print("QR code: \(productCode).")
}

如果變數裡面統一是使用 let 或者統一使用 var,那麼可以簡寫成一個:

    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"
case lineFeed = "\n"
case carriageReturn = "\r"
}

上面的例子告訴我們,可以指定 enum 的原始值型別。

如果沒有給 enum 顯示指定值型別,那麼 Swift 會預設將每個值的原始值設定為其名字本身的 String 型別。
也可以像 C 那樣,使用整型值,也可以自動排序下來。如下:

    enum Planet: Int {
case mercury = 1, venus, earth, mars, jupiter, saturn, uranus, neptune
}

這個時候,我們會涉及到一個構造方法:rawValue。參見以下初始化:

    let possiblePlanet = Planet(rawValue: 7)

注意,此時的 possiblePlanet 變數型別是 “Planet?”,注意其中的問號。因為使用 rawValue 初始化 enum,可能得到一個非法值。上面這一句,變數的值是 nil

遞迴變數

暫時不看。需要注意的是 indirect 關鍵字。

相關文章

IOS開發 最新文章