在C/C++中, 使用enum可提升程式碼的可讀性
而Swift的enum擴充原本的功能,使用上有更多的彈性
Syntax
1 | enum ProgrammingLanguage { |
不同於數C和Objetive-C,Swift的enum並沒有預設的整數值,也就是說case C並不隱含整數0的概念
使用時除了第一個比較傳統的寫法外;你也可以省略enum的型別名稱,這也是Swift的syntax sugar
1 | let secondLanguage = .CPP |
使用switch做判斷時一樣能用簡短的表示法。因為使為enum當參數,compiler會檢查型別,switch也能省去default的值
Associated Values
這是Swift的enum和其它語言不一樣的地方,我們能為enum創造關聯性的值1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16enum CurrencyType {
case USD(Double)
case TWD(Int)
}
var price = CurrencyType.USD(33.99)
func payCheck(price: CurrencyType) {
switch price {
case .USD(let usDollar):
let ntDollar = usDollar * 33
print("總共為: \(ntDollar) NTD")
case .NTD(let ntDollar):
print("總共為: \(ntDollar) NTD")
}
}
CurrencyType包含二種貨幣,美金和新台幣. 而前者需要Double來表示;後者則是Int
在宣告price時,我們給予一個Double的值表示美金的價錢;而switch case需要加上對應的參數
這項特性讓我們使用enum時除了表示狀態,還能給予相對應的值
Raw Values
除了上述的Associated Values, Swift的enum也有C/C++給予初值的特性1
2
3
4
5
6enum HTTPResponse {
case Continue = 100
case Success = 200
case MultipleChoices = 300
case NotFound = 404
}
這個例子中,HTTPResponse一開始就給予raw value. 而raw value只能為字串,字元,浮點數或整數,並且不能重複
Initializing from a Raw Value
假如定義了一組enum含有raw value,則我們能使用raw value查循狀態1
2
3
4
5
6
7
8
9enum HTTPResponse {
case Continue = 100
case Success = 200
case MultipleChoices = 300
case NotFound = 404
}
let statusCode = 300
let httpResponse = HTTPResponse(rawValue: statusCode) // MultipleChoices
將外界傳來status code回應HTTPResponse相對應的狀態;假如沒找到則回傳nil
rawValue回傳的值為optional,即使沒找到也不會讓程式hang住
下一篇接著介紹optional
參考來源:
官方文件