元组(tuples)把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。
举个栗子,当你请求网页不存在时会返回一个 404 Not Found
状态码,你可以用元组来实现:
let http404Error = (404, "Not Found")
// http404Error 的类型是 (Int, String),值是 (404, "Not Found")
(404, "Not Found")
元组把一个 值和一个 值组合起来表示 HTTP 状态码的两个部分:一个数字 和一个人类可读的描述。这个元组可以被描述为“一个类型为 (Int, String)
的元组”。
你可以把任意顺序的类型组合成一个元组,这个元组可以包含所有类型。只要你想,你可以创建一个类型为 (Int,Int,Int)
或者 (String,Bool)
或者其他任何你想要的组合的元组。
- 可以将元祖内容分解成单独的常量和变量
let (statusCode, statusMessage) = http404Error
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, _) = http404Error
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"
- 元组的比较
两个元组类型相同才能进行比较,即元素个数相同且相同下标的元素类型也相同。且不能比较超过6个以上元素的元组。
//根据第一个位置不相等的两个元素的大小来决定两个元组的大小
let tuple1 = (1,1)
let tuple2 = (1,2)
tuple1 < tuple2 //true
let tuple4 = (1,"a")
let tuple5 = (1,"b")
tuple4 < tuple5 //true
let tuple1 = (1,1)
let tuple2 = (1,2,3)
tuple1 < tuple2 //程序报错,元组类型不同无法比较
let largeTuple1 = (1,2,3,4,5,6,7)
let largeTuple2 = (1,2,3,4,5,6,7)
largeTuple1 == largeTuple2 //程序报错,元素个数超过6个无法比较
注意:
元组在临时组织值的时候很有用,但是并不适合创建复杂的数据结构。如果你的数据结
构并不是临时使用,请使用类或者结构体而不是元组。