元組是swift編程語言中唯一的一種復(fù)合類型质欲,他可以將指定有限個數(shù)的任何類型一次整理為一個對象,元組中的每一種類型都可以是任何的結(jié)構(gòu)體肝匆、枚舉或類類型懂讯,甚至也可以是一個元組以及空元組。元組中的每個元素我們稱為一個“分量”
eg:
enum MyEnum {
case one, two, three
}
class MyClass {
var member = 0
}”
第一節(jié):訪問元組中的元素
如果我們要訪問元組中的元素伐厌,可以使用成員訪問操作符 . 承绸,后面跟元素的索引位置(從0開始計)
eg:
//聲明一個元組常量tuple,類型為(Int, Double, Bool)
let tuple = (10, 0.5, false)
//訪問元組中的第一個元素
//這里的常量a的值為10
let a = tuple.0
我們也可以給元組指定標(biāo)簽挣轨,通過訪問標(biāo)簽來訪問元素
eg:
//聲明一個元組常量tuple,其類型為:(int: Int, double: Double,bool: Bool)
let tuple = (int: 10, double: 0.5, bool: false)
//訪問元組中的第一個元素
//這里的常量a的值為10
let a = tuple.int
注意: 一旦一個元組的某個元素帶上標(biāo)簽军熏,那么該元組類型相應(yīng)的位置上也必須加上標(biāo)簽,一個元組中不需要給所有的元素都加上標(biāo)簽卷扮,可以加一部分荡澎,指定標(biāo)簽的元素,我們可以通過索引位置訪問也可以通過標(biāo)簽訪問; 元組往往用于一個函數(shù)返回多個不同類型的對象的場合晤锹。
第二節(jié):元組分解
我們能很容易的定義一個元組對象摩幔,我們也可以很容易的同時萃取一個元組中的相應(yīng)元素,這也被稱為元組分解鞭铆。
我們在做元組分解時或衡,將幾個變量或常量以元組定的方式聲明出來,然后=右邊元組相應(yīng)的元素就能賦值給=左邊相應(yīng)的變量或常量了衔彻。
eg:
// 聲明一個元組常量tuple
let tuple = (10, 0.5, true)
//這里同時聲明三個常量:a, b, c
//tuple的第一個元素對 a 初始化薇宠,b, c同理
let (a, b, c) = tuple
// 如果我們不想萃取元組中的某個元素,用_代替
// a的值為:5.5艰额, c的值為:false
let(a, _, c) = (5.5, "hello", false)
// 因為元組分解這一語法特性澄港,可以通過元組字面量來交換兩個對象的值
// 定義 a和b兩個Int類型對象
var a = 1, b = 2
// 交換兩個對象的值,a = 2柄沮, b = 1
(a, b) = (b, a)
注意:上面代碼 let (a, b, c) 不是在聲明元組回梧,而是同時聲明三個常量废岂,用于萃取一個元組中的值,元組也可以看作一個對象狱意,上面的tuple就是名副其實的一個元組對象
第三節(jié):元組比較
兩個相同元素類型的元組湖苞,如果每個元素都遵循了Equatable協(xié)議,那么這兩個元組可以用==, !=操作符來判斷兩者是否相等详囤,如果兩個元組中的每個元素的值對應(yīng)都相等财骨,則這兩個元組對象相等,否則不等藏姐。
eg:
let t1 = (1, 2, 3)
let t2 = (1, 2, 3)
//判斷元組 t1和t2 是否相等隆箩,結(jié)果為:true
print("t1 == t2? \(t1 == t2)")
如果每個元素都遵循Comparable協(xié)議,那么這兩個元組可以用<, <=, >, >=操作符來比較羔杨,從第一個元素開始比較捌臊,有結(jié)果立即返回結(jié)果,否則依次進(jìn)行比較下去兜材。
eg:
let t3 = (6, 9, 3, 4)
let t4 = (6, 2, 5, 8)
//判斷元組 t3和t4 是否為小于關(guān)系理澎,結(jié)果為:false
//因為t3的第二個元素大于t4的第二個元素
print("t3 < t4? \(t3 < t4)")
注意:這里t1和t3比較,會直接報錯曙寡,因為不屬于同一個類型
eg:
let t5 = (true, 9, 3, 4)
let t6 = (false, 2, 5, 8)
這里的t5和t6比較也會報錯糠爬,雖然元組類型一樣,因為Bool類型不遵循comparable協(xié)議