類型別名(type aliases)就是給現有類型定義另一個名字。你可以使用 typealias 關鍵字來定義類型別名。
當你想要給現有類型起一個更有意義的名字時,類型別名非常有用。假設你正在處理特定長度的外部資源的數據:
1. typealias AudioSample = UInt16
定義了一個類型別名之後,你可以在任何使用原始名的地方使用別名:
1. var maxAmplitudeFound = AudioSample.min
2. // maxAmplitudeFound 現在是 0
本例中,AudioSample 被定義爲 UInt16 的一個別名。因爲它是別名,AudioSample.min實際上是 UInt16.min,所以會給 maxAmplitudeFound 賦一個初值 0。
布爾值
Swift 有一個基本的布爾(Boolean)類型,叫做 Bool。布爾值指邏輯上的(logical),因爲它們只能是真或者假。Swift 有兩個布爾常量,true 和 false:
1. let orangesAreOrange = true
2. let turnipsAreDelicious = false
當你編寫條件語句比如 if 語句的時候,布爾值非常有用:
1. if turnipsAreDelicious {
2. println("Mmm, tasty turnips!")
3. } else {
4. println("Eww, turnips are horrible.")
5. }
6. // 輸出 "Eww, turnips are horrible."
如果你在需要使用 Bool 類型的地方使用了非布爾值,Swift 的類型安全機制會報錯。下面的例子會報告一個編譯時錯誤:
1. let i = 1
2. if i {
3. // 這個例子不會通過編譯,會報錯
4. }
然而,下面的例子是合法的:
1. let i = 1
2. if i == 1 {
3. // 這個例子會編譯成功
4. }
i == 1 的比較結果是 Bool 類型,所以第二個例子可以通過類型檢查。類似 i == 1 這樣的比較,請參考基本操作符。
和 Swift 中的其他類型安全的例子一樣,這個方法可以避免錯誤並保證這塊代碼的意圖總是清晰的。
元組
元組(tuples)把多個值組合成一個複合值。元組內的值可以使任意類型,並不要求是相同類型。
下面這個例子中,(404, "Not Found")是一個描述 HTTP 狀態碼(HTTP status code)的元組。HTTP 狀態碼是當你請求網頁的時候 web 服務器返回的一個特殊值。如果你請求的網頁不存在就會返回一個 404 Not Found 狀態碼。
1. let http404Error = (404, "Not Found")
2. // http404Error 的類型是 (Int, String),值是 (404, "Not Found")
(404, "Not Found")元組把一個 Int 值和一個 String 值組合起來表示 HTTP 狀態碼的兩個部分:一個數字和一個人類可讀的描述。這個元組可以被描述爲“一個類型爲(Int, String)的元組”。
你可以把任意順序的類型組合成一個元組,這個元組可以包含所有類型。只要你想,你可以創建一個類型爲(Int, Int, Int)或者(String, Bool)或者其他任何你想要的組合的元組。 你可以將一個元組的內容分解(decompose)成單獨的常量和變量,然後你就可以正常使用它們了:
1. let (statusCode, statusMessage) = http404Error
2. println("The status code is \(statusCode)")
3. // 輸出 "The status code is 404"
4. println("The status message is \(statusMessage)")
5. // 輸出 "The status message is Not Found"
1. let (justTheStatusCode, _) = http404Error
2. println("The status code is \(justTheStatusCode)")
3. // 輸出 "The status code is 404"
此外,你還可以通過下標來訪問元組中的單個元素,下標從零開始:
1. println("The status code is \(http404Error.0)")
2. // 輸出 "The status code is 404"
3. println("The status message is \(http404Error.1)")
4. // 輸出 "The status message is Not Found"
你可以在定義元組的時候給單個元素命名:
1. let http200Status = (statusCode: 200, description: "OK")
給元組中的元素命名後,你可以通過名字來獲取這些元素的值:
1. println("The status code is \(http200Status.statusCode)")
2. // 輸出 "The status code is 200"
3. println("The status message is \(http200Status.description)")
4. // 輸出 "The status message is OK"
作爲函數返回值時,元組非常有用。一個用來獲取網頁的函數可能會返回一個(Int, String)元組來描述是否獲取成功。和只能返回一個類型的值比較起來,一個包含兩個不同類型值的元組可以讓函數的返回信息更有用。
注意:元組在臨時組織值的時候很有用,但是並不適合創建複雜的數據結構。如果你的數據結構並不是臨時使用,請使用類或者結構體而不是元組。