? 元組把多個(gè)值合并成單一的復(fù)合型的值簇搅。元組內(nèi)的值可以是任何類型,而且可以不必是同一類型软吐。
? 元組是關(guān)系數(shù)據(jù)庫(kù)中的基本概念瘩将,關(guān)系是一張表,表中的每行(即數(shù)據(jù)庫(kù)中的每條記錄)就是一個(gè)元組凹耙,每列就是一個(gè)屬性姿现。在二維表里,元組也成為行肖抱。
? 例如备典,(404, “Not Found”)是一個(gè)描述了HTTP狀態(tài)代碼的元組。HTTP狀態(tài)代碼是當(dāng)你請(qǐng)求網(wǎng)頁(yè)的時(shí)候web服務(wù)器返回的一個(gè)特殊值意述。當(dāng)你請(qǐng)求不存在的網(wǎng)頁(yè)時(shí)提佣,就會(huì)返回404 Not Found。
let http404Error = (404, "Not Found")? // http404Erroris of type (Int, String)
(404, "Not Found")元組把一個(gè)Int和一個(gè)String組合起來(lái)表示HTTP狀態(tài)代碼的兩種不同的值:數(shù)字和人類可讀的描述荤崇。它可以被描述為“一個(gè)類型為(Int拌屏, String)”的元組
? 再比如let student = ("001", "Wenxin", "11",
"女", "六一班")可以代表某個(gè)學(xué)生的元組(學(xué)號(hào), 姓名术荤, 年齡倚喂, 性別, 班級(jí))瓣戚。
? 你也可以將一個(gè)元組的內(nèi)容分解成單獨(dú)的常量或變量端圈,這樣你就可以正常的使用它們了:
let http404Error = (404, "NotFound")
let (statusCode, statusMessage) = http404Error
print("The status code is \(statusCode)")
// prints "The status code is404"
print("The status message is \(statusMessage)")
// prints "The status message is NotFound"
? 當(dāng)你分解元組的時(shí)候,如果只需要使用其中的一部分?jǐn)?shù)據(jù)子库,不需要的數(shù)據(jù)可以用下劃線(_)代替:
let http404Error = (404, "NotFound")
let (justTheStatusCode, _) = http404Error
print("The status code is \(justTheStatusCode)")
// prints "The status code is404"
另一種方法就是利用從零開(kāi)始的索引數(shù)字訪問(wèn)元組中的單獨(dú)元素:
print("The status code is \(http404Error.0)")
// prints "The status code is404"
print("The status message is \(http404Error.1)")
// prints "The status message is NotFound"
你可以在定義元組的時(shí)候給其中的單個(gè)元素命名:
let http200Status = (statusCode: 200, description:"OK")
在命名之后舱权,你就可以通過(guò)訪問(wèn)名字來(lái)獲取元素的值了:
print("The status code is \(http200Status.statusCode)")
// prints "The status code is200"
print("The status message is \(http200Status.description)")
// prints "The status message isOK"
作為函數(shù)返回值時(shí),元組非常有用仑嗅。
例如:定義了一個(gè)叫做minMax(array:)的函數(shù)宴倍,它可以找到類型為Int的數(shù)組中最大數(shù)字和最小數(shù)字。
func minMax(array: [Int]) -> (min: Int, max:Int) {
var currentMin = array[0]
var currentMax = array[0]
for value in array[1..
ifvalue < currentMin {
currentMin= value
}else if value > currentMax {
currentMax= value
}
}
return (currentMin,currentMax)
}
函數(shù)minMax(array:)返回了一個(gè)包含兩個(gè)Int值的元組无畔。這兩個(gè)值被?min和max?標(biāo)記啊楚,這樣當(dāng)查詢函數(shù)返回值的時(shí)候就可以通過(guò)名字訪問(wèn)了。
小問(wèn)題:理論上用字典或者是建一個(gè)Model也能實(shí)現(xiàn)函數(shù)返回多值的問(wèn)題浑彰,那元組與這兩種方式相比有什么優(yōu)勢(shì)恭理?歡迎評(píng)論區(qū)留言!9洹颜价!