Swift-技巧(三)使用元組(tuple)

最近看 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,應該在最小的範圍內使用,然後被釋放也就是元組是值傳遞,而不是引用

元組包括 StringIntegerBool,甚至是元組類型都可以:

// 創建元組
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 = (),實際上就是一個空的元組。所以,元組也可以是空的

題外話

時間倉促,說的東西可能不全面,在你實現過程中遇到什麼問題,評論區給我留言,我會儘快回復

Tags: