Swift中的tuple(元組)

語言: CN / TW / HK


highlight: tomorrow-night-blue

小知識,大挑戰!本文正在參與“程式設計師必備小知識”創作活動。

前言

上一節說了Void,在其中我們提到了元組這個概念,這節我們就來簡單聊一聊它。

tuple的由來

就我瞭解的程式語言中,Python就有元組這個概念,考慮到Swift的語法風格和Python極為相似,並且Swift是一門“借鑑”了很多程式語言特性的語言,所以說tuple(元組)這個概念完全可以看成是舶來品。

tuple的使用

我們先來看看怎麼定義和表示一個元組:

let tuple: (Int, String) = (10, "season") print(tuple) print(tuple.0) print(tuple.1)

給出的列印結果也非常簡單: (10, "season") 10 season 元組是需要使用()來包裹裡面,這一點要記住,否則編寫的時候就會報錯。

表示單個元素時,我們是從角標0開始表示的,這點和陣列一樣。

另外,這裡元組是用let修飾的,如果使用var來修飾,那麼元組中對應的單個元素或者整個元組都可以重新賦值:

``` var tuple: (Int, String) = (10, "season") print(tuple) print(tuple.0) print(tuple.1)

/// 單個元素重新賦值 tuple.0 = 20 tuple.1 = "soso" print(tuple) print(tuple.0) print(tuple.1)

/// 整體重新賦值 tuple = (30, "sola") print(tuple) print(tuple.0) print(tuple.1) ``` 像這種通過角標0、1來表示元組的元素,很多時候都會不明其意,所以我們可以定義的更細緻一點,比如下面這樣:

``` var tuple: (age: Int, name: String) = (10, "season")

print(tuple.age)

print(tuple.name) ``` 你看這樣話,我們就可以明確的知道元組的第1個元素表示年齡,第2個元素表示名字了。

你甚至可以這麼操作,先通過typealias定義個別名,然後在編寫元組,這樣就非常的簡潔易懂了:

``` typealias PersonTuple = (age: Int, name: String)

var tuple: PersonTuple = (10, "season") print(PersonTuple.age) print(PersonTuple.name) ```

想想看,這和你定義一個型別,然後獲取其中的值多麼相似啊:

``` struct Person {     let age: Int     let name: String }

let p = Person(age: 10, name: "season") print(p.age) print(p.name) ```

但是,相比較定義一個類,通過元組是不是可以更為簡單的表示一個數據型別呢?

你會問,這種元組有什麼用呢?

回想一個場景:當一個函式,會返回多個值的時候,一般我們怎麼做的?

我們會像上面定義一個Person的型別,然後去接受值,最後返回Person。

func example(num: NSNumber, nickName: String) -> Person {     let person = Person(age: num.intValue, name: nickName)     return person }

我們完全可以使用元組來替換掉:

``` func example1(num: NSNumber, nickName: String) -> (Int, String) {     return (num.intValue, nickName) }

func example2(num: NSNumber, nickName: String) -> (age: Int, name: String) {     return (num.intValue, nickName) }

func example3(num: NSNumber, nickName: String) -> PersonInfo {     return (num.intValue, nickName) } ```

注意

需要注意的是元組不能替代你定義的資料型別,它更多是對於使用的並不是特別頻繁、資料結構相對比較簡單的資料進行表示。

拿捏好度,才能更好的使用與舒適的程式設計。

總結

本節講解了Swift中元組的一些簡單表示與用法,對比了和自定義型別返回的一些差異,說明了作為函式返回值的一些優勢。

我們下期見。