本文章純粹是中文版《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
關鍵字。
写评论
很抱歉,必須登入網站才能發佈留言。