元組
元組(Tuples)將多個值組合為一個復合值。元組內的值可以是任何類型,各個元素不需要為相同類型(各個元素之間類型獨立,互不干擾--Joe.Huang)。
下例中,(404, "Not Found") 是一個描述HTTP狀態碼的元組。HTTP狀態碼是當你向WEB服務器請求頁面時服務器返回的一個特殊值,如果你(向WEB服務器)請求了一個不存在的網頁,返回的狀態碼就是 404 Not Found :
1 let http404Error = (404, "Not Found")2 // http404Error is of type (Int, String), and equals (404, "Not Found")3 // http404錯誤的類型為(整型,字符串類型),它的值是(404,"Not Found")
(404, "Not Found") 元組將一個 Int 值與一個 String 值組合起來,表示 HTTP 狀態碼的兩個值:一個數字和一個人們可讀取的(文字性)描述。它可以這樣理解:“一個類型為 (Int, String) 的元組”。
你可以將類型任意排列來創建元組,也可以隨心所欲地讓元組包含多種不同類型。只要你愿意,創建類型為 (Int, Int, Int) 或 (String, Bool) 的元組也不會有問題,當然,根據你的需要,其它排列方式也是可以的。
元組的內容可以分解(decompose)還原并賦值給單獨的常量或變量,然后便可照常訪問:
1 let (statusCode, statusMessage) = http404Error2 PRintln("The status code is /(statusCode)")3 // prints "The status code is 404" //輸出“狀態碼為 404”4 println("The status message is /(statusMessage)")5 // prints "The status message is Not Found //輸出"狀態信息 Not Found"
如果你只需要元組的某一部分值,可以在分解元組時用下劃線(_)標識來忽略掉其他部分:
1 let (justTheStatusCode, _) = http404Error2 println("The status code is /(justTheStatusCode)")3 // prints "The status code is 404 //輸出“狀態碼為 404”
或者,通過以 0 開頭的元組索引訪問元組的各個元素值:
1 println("The status code is /(http404Error.0)")2 // prints "The status code is 404" //輸出“狀態碼為 404”3 println("The status message is /(http404Error.1)")4 // prints "The status message is Not Found //輸出“狀態碼為 Not Found”
5 //這種方式類似于數組通過下標索引訪問數組各個元素的值--Joe.Huang
還可以在定義元組時為元組的各個元素單獨命名:
1 let http200Status = (statusCode: 200, description: "OK")
為元組各元素命名后,便可以通過元素名稱來訪問各個元素的值了:
1 println("The status code is /(http200Status.statusCode)")2 // prints "The status code is 200" //輸出“狀態碼為 404”3 println("The status message is /(http200Status.description)")4 // prints "The status message is OK //輸出“狀態信息 OK”
元組在作為函數返回值時非常有用。一個獲取網頁內容的函數可能會通過返回一個 (Int, String) 的元組類型來描述網頁載入是成功還是失敗。函數會返回兩個類型完全不同的值來描述返回的狀態或結果,(這種返回方式)所能提供的信息比只能返回固定類型的單個值要有用得多。詳情請參見 多個返回值的函數(后面章節會譯到)。
注:
元組對于多個關聯值的臨時組合是很有用的。但它們并不適用于創建復雜的數據結構,如果你的數據結構的生命周期超過臨時使用的范疇(不是臨時使用的值,就應該通過類或建模緩存起來--Joe.Huang),請將它作為類或結構建模,而不是以元組存儲。詳情請見 類與結構(后面章節會譯到)。
謝謝,Swifter-QQ群:362232993,同好者進~
Fork:https://github.com/Joejo/Swift-lesson-for-chinese
新聞熱點
疑難解答