Swift 中的元祖

使用元祖打包數據

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

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

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

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

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

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

// 定義一個 HTTP 狀態(tài)碼和描述的元祖,元祖類型為(Int, String)
let http404Error = (404, "Not Found")

// 1. 通過索引的方式訪問元祖
http404Error.0
http404Error.1

// 2. 通過分解賦值成單獨的常量或變量
let (statusCode, statusMessage) = http404Error
print("\(statusCode) ---- \(statusMessage)")

// 2.1 可以通過 _ 忽略不想要的值, 如元祖中的 "Not Found" 不需要使用到的情況下可以這樣做
let (statusCode2, _) = http404Error
print(statusCode2)

我們還可以在定義元祖的時候單獨給元祖中的元素命名, 以后即可通過該命名訪問對應的元素

let http200Status = (statusCode: 200, description: "OK")
print("The status code is \(http200Status.statusCode)")
print("The status message is \(http200Status.description)")

元祖比較

當我們比較兩個元祖類型的變量時,要遵循下面的規(guī)則:
首先,只有元素個數相同的元祖變量之間,才能進行比較。例如,下面的代碼會引發(fā)編譯錯誤:

let tuple12 = (1, 2)
let tuple123 = (1, 2, 3)

tuple2 < tuple3  // 編譯報錯

其次,當 Tuple 中元素個數相同時,比較是按照 Tuple 中元素的位置從前向后依次進行的:

如果 Tuple 中,相同位置的兩個元素相等,則繼續(xù)比較下一個位置的兩個元素,并根據第一個同一位置不相等的兩個元素的大小關系,確定兩個 Tuple 變量的關系;
如果兩個 Tuple 中所有位置的元素都相等,則兩個 Tuple 變量相等;
因此,對于下面這個例子,tuple11 < tuple12 的結果是 true:

let tuple11 = (1, 1)
let tuple12 = (1, 2)

tuple11 < tuple12 // true

但是,有一點要說明的是,我們只可以對最多包含 6 個元素的 Tuple 變量進行比較,超過這個數量,Swift 會報錯。例如對于下面這段代碼:

let largeTuple1 = (1, 2, 3, 4, 5, 6, 7)
let largeTuple2 = (1, 2, 3, 4, 5, 6, 7)

largeTuple1 == largeTuple2  // Error !!!
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容