在实际开发中,经常需要存储一组相关的数据,如HTTP状态码(404)和提示信息(“Not Found”)等。把多个值组合成一个复合值,这个复合值就叫做元组类型(Tuples),也叫做元组。
元组的声明
1.元组类型的字面量
元组的字面量是使用逗号分隔并包含在括号里的0至多个数值。元组内的值可以是任意类型的,每个值得类型也可以不同。元组的一个重要用途是作为函数的返回值,可以传递多个值。
元素类型的字面量格式:
{元素值1,元素值2,元素值3,元素值4,……元素值n}
也可以采用键值对的方式,给全部或部分的元组元素取名
{元素名称1:元素值1,元素名称2:元素值2,元素名称3:元素值3……}
例如,声明一个元组用于描述学生信息,包含姓名、年龄和性别信息,有以下两种声明方式。
{"张三",18,"男"}
{name:"张三",age:18,gender:"男"}
第一种声明方式简单,代码量少,而第二种方式代码量多,但是可读性更好。
2.声明元组类型常量和变量
除了基础类型之外,元组类型也可以声明为常量和变量。常量和变量元组类型的声明格式:
let 常量名 = 元组类型的字面量
var 变量名 = 元组类型的字面量
具体示例:
let student1 = {"张三",18,"男"}
var student2 = {name:"张三",age:18,gender:"男"}
3.匿名元组
除了对整个元组声明常量和变量之外,还可以对元组内的每个元素进行分解,单独声明常量和变量。此时声明的元组是匿名的。示例代码:
let (name,age,gender) = {"张三",18,"男"}
print("姓名:\(name),年龄:\(age),性别:\(gender)")
上述代码将元组内的每一个元素单独声明了一个变量。
如果只需要一部分元素值,则可以将不需要的元素用下划线(_)来标记,如下所示。
let (name,_,_) = {"张三",18,"男"}
print("学生姓名:\(name)")
注意:
(1)分解声明时,左边的常量或变量个数必须与右边的元组元素个数相同,否则会报错。
(2)Void是空元组类型()的别名。
元组变量的访问
(1)通过元素的下标访问
元组内的元素是有序排列的,通过元素的下标就可以访问特定的元素,下标从0开始。
let student = {"张三",18,"男"}
print("姓名:\(student.0),年龄:\(student.1),性别:\(student.2))")
(2)通过元素名称访问
如果元组内的元素各自有名称,则可以使用元素名称来访问。
let student = (name:"张三",age:18,gender:"男")
print("姓名:\(student.name),年龄:\(student.age),性别:\(student.gender))")
(3)通过元素的常量或变量名访问
let (name,_,_) = {"张三",18,"男"}
print("学生姓名:\(name)")
元组的比较
Swift2.2之后,可以直接使用==操作符对元组进行比较。但要注意一下两点。
1.使用==操作符只能对最多含有6个元素的元组进行比较。这样设计考虑的是:元组的使用场景是针对含有少量元素的值,如果元素过多,建议使用类和结构体。
2.在对元组值进行比较时,会忽略元组的元素名称。如果以下两个数组:
let xiaoMing1 = (first:"xiaoMing",last:19)
let xiaoMing2 = (first:"xiaoMing",last:19)
如果使用xiaoMing1 == xiaoMing2进行比较,得到的结果是true。