Swift 基礎之布爾值和元組

一:布爾值

Swift 有一個基本的布爾(Boolean)類型,叫做 Bool。布爾值指邏輯上的(logical),因爲它們只能是真或者假。Swift 有兩個布爾常量,true 和 false:

let orangesAreOrange = true
let turnipsAreDelicious = false

orangesAreOrange 和 turnipsAreDelicious 的類型會被推測爲 Bool,因爲它們的初值是布爾字面量。就像之前提到的 Int 和 Double 一樣,如果你創建變量的時候給它們賦值 true 或者 false,那你不需要將常量或者變量聲明爲 Bool 類型。初始化常量或者變量的時候如果 所賦的值類型已知,就可以觸發類型推測,這讓 Swift 代碼更加簡潔並且可讀性更高。

當你編寫條件語句比如 if 語句的時候,布爾值非常有用:

if turnipsAreDelicious {
    print("Mmm, tasty turnips!")
} else {
    print("Eww, turnips are horrible.")
}

條件語句,例如 if,請參考控制流。

如果你在需要使用 Bool 類型的地方使用了非布爾值,Swift 的類型安全機制會報錯。下面的例子會報告一個編譯時錯誤:

let i = 1
if i {
    // 這個例子不會通過編譯,會報錯
}

然而,下面的例子是合法的:

let i = 1
if i == 1 {
    // 這個例子會編譯成功
}

i == 1 的比較結果是 Bool 類型,所以第二個例子可以通過類型檢查。類似 i == 1 這樣的比較。

和 Swift 中的其他類型安全的例子一樣,這個方法可以避免錯誤並保證這塊代碼的意圖總 是清晰的。

二:元組

元組(tuples)把多個值組合成一個複合值。元組內的值可以使任意類型,並不要求是相 同類型。

下面這個例子中,(404, “Not Found”)是一個描述 HTTP 狀態碼(HTTP status code)的 元組。HTTP 狀態碼是當你請求網頁的時候 web 服務器返回的一個特殊值。如果你請求 的網頁不存在就會返回一個 404 Not Found 狀態碼。

let http404Erroe = (404, "Not Found")
// http404Error 的類型是 (Int, String),值是 (404, "Not Found")

(404, “Not Found”)元組把一個 Int 值和一個 String 值組合起來表示 HTTP 狀態碼的兩個 部分:一個數字和一個人類可讀的描述。這個元組可以被描述爲“一個類型爲(Int, String)的 元組”。

你可以把任意順序的類型組合成一個元組,這個元組可以包含所有類型。只要你想,你可 以創建一個類型爲(Int, Int, Int)或者(String, Bool)或者其他任何你想要的組合的元組。

你可以將一個元組的內容分解(decompose)成單獨的常量和變量,然後你就可以正常使用它們了:

let (statusCode, statusMessage) = http404Erroe
print("The status code is \(statusCode)")
// 輸出 "The status code is 404"
print("The status message is \(statusMessage)")
// 輸出 "The status message is Not Found"

如果你只需要一部分元組值,分解的時候可以把要忽略的部分用下劃線(_)標記:

let (justTheStatusCode, _) = http404Erroe
print("The status code is \(justTheStatusCode)")
// 輸出 "The status code is 404"

此外,你還可以通過下標來訪問元組中的單個元素,下標從零開始:

print("The status code is \(http404Error.0)")
// 輸出 "The status code is 404"
print("The status message is \(http404Error.1)")
// 輸出 "The status message is Not Found"

你可以在定義元組的時候給單個元素命名:

let http200Status = (statusCode: 200, description: "OK")

給元組中的元素命名後,你可以通過名字來獲取這些元素的值:

print("The status code is \(http200Status.statusCode)")
// 輸出 "The status code is 200"
print("The status message is \(http200Status.description)")
// 輸出 "The status message is OK"

作爲函數返回值時,元組非常有用。一個用來獲取網頁的函數可能會返回一個(Int, String) 元組來描述是否獲取成功。和只能返回一個類型的值比較起來,一個包含兩個不同類型值 的元組可以讓函數的返回信息更有用。

注意:元組在臨時組織值的時候很有用,但是並不適合創建複雜的數據結構。如果你的數據結構並不是臨時使用,請使用類或者結構體而不是元組。請參考類和結構體。

關注公衆號 [Swift 社區] 獲取文章示例代碼,添加微信:[FBY-fan] 拉你進羣交流。

發佈了114 篇原創文章 · 獲贊 21 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章