最近看 iOS 的官方功能的 Demo 時,發現代碼中使用元組的地方很多,所以興趣上來,查了下元組的出處。
在蘋果的文檔中就只有簡短的兩句,使用元組創建一個組合的值,從函數中返回多個值。元組中的可以使用屬性值或者索引引用。
Apple Documentation
Use a tuple to make a compound value, to return multiple values from a function. The elements of a tuple can be referred to either by name or by number.
語句越是簡短,傳達的信息越是多啊,在查找其他大佬對元組的介紹時,比較認同其中一個大佬的理解:把元組看作是微型 Struct 或者 Struct List,應該在最小的范圍內使用,然后被釋放。也就是元組是值傳遞,而不是引用。
元組包括 String
、Integer
、Bool
,甚至是元組類型都可以:
// 創建元組
let foo = (0, false, 'Hello')
也可以在創建元組時,定義值類型:
let foo: (Int, Bool, String) = (0, false, 'Hello')
在使用的時候可以通過索引獲取:
print(foo.0) // print: "0"
print(foo.1) // print: "false"
print(foo.2) // print: "Hello"
也可以通過屬性值去獲取值:
// 創建元組
let person = (age: 20, isTall: false, name: "tam")
print(person.age) // print: "20"
print(person.isTall) // print: "false"
print(person.name) // print: "tam"
哪里可以使用元組?
當函數需要返回多個不同類型的值時,是使用元組最好的時候。可以使用 typealias
去定義一個元組類型,並給到函數處理,比如下面代碼:
typealias Person = (age: Int, isTall: Bool, name: String)
func getMultipleValues() -> Person {
let person: Person = (age: 20, isTall: false, name: "tam")
return person
}
let person = getMultipleValues()
print(person.age) // print: "20"
print(person.isTall) // print: "false"
print(person.name) // print: "tam"
發現
如果使用 Swift 開發時,也在不知不覺中接觸到元組,先看下面三個函數:
func functionA() -> Void { }
func functionB() -> () { }
func functionC() { }
functionA()
是創建函數的標准樣式,functionB
的返回值是元組 ()
,functionC()
通過完全省略返回類型。
由此可推斷,typealias Void = ()
,實際上就是一個空的元組。所以,元組也可以是空的。
題外話
時間倉促,說的東西可能不全面,在你實現過程中遇到什么問題,評論區給我留言,我會盡快回復