元組
元組(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) = http404Error
2 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"
查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/extra/
如果你只需要元組的某一部分值,可以在分解元組時用底線(_)標識來忽略掉其他部分:
1 let (justTheStatusCode, _) = http404Error
2 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),請將它作為類或結構建模,而不是以元組儲存。詳情請見 類與結構(後面章節會譯到)。