Swift學習筆記之元組(tuples)。本站提示廣大學習愛好者:(Swift學習筆記之元組(tuples))文章只能為提供參考,不一定能成為您想要的結果。以下是Swift學習筆記之元組(tuples)正文
作者:sunjinshuai
這篇文章主要給大家介紹了Swift中元組(tuples)的相關資料,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。元組
元組(tuples)是由其它類型組合而成的類型。元組可能包含零或多個類型,比如 字符串、整數、字符、布爾以及其它元組。同時請注意,元組是值傳遞,而不是引用。
在Swift中創建元組的方式很簡單,元組類型是用括號包圍,由一個逗號分隔的零個或多個類型的列表。例如:
let firstHighScore = ("Mary", 9001)
另外,在創建元組時你還可以給元組中的元素命名:
let secondHighScore = (name: "James", score: 4096)
以上就是創建元組的兩種方式,非常簡單和簡潔。你不需要像創建struct一樣寫出它的結構和內部屬性,也不需要像創建class一樣要寫初始化方法。你只需要把你想用的、任何類型的值放在圓括號內,用逗號隔開即可。如果你願意你還可以給每個元素命名,提高元組使用效率。
從元組中讀元素
如果我們沒有給元組的元素命名,我們可以用點語法,通過定義好的元組變量或常量獲取它的第1個到第n個元素:
let firstHighScore = ("Mary", 9001) println(firstHighScore.0) // Mary println(firstHighScore.1) // 9001
如果你覺得上述這種方法會造成語義的不明確,那麼我們還可以將元組賦值給一個帶有元素名稱的元組(元素名稱個數要對應):
let (firstName, firstScore) = firstHighScore println(firstName) // Mary println(firstScore) // 9001
如果你只需要一部分元組值,分解的時候可以把要忽略的部分用下劃線(_)標記:
let (_, firstScore) = firstHighScore println(firstScore) // 9001
如果我們已經給元組中的元素命名了名稱,那麼我們可以這樣寫:
let secondHighScore = (name: "James", score: 4096) println(secondHighScore.name) // James println(secondHighScore.score) // 4096
將元組作為函數返回值
當你想讓一個函數能夠返回多種類型時,這是元組的最佳使用場景。
我們可以將元組作為函數的返回值,下面這個函數的返回值就是我們之前定義過的secondHighScore元組:
func getAHighScore() -> (name: String, score: Int) { let theName = "Patricia" let theScore = 3894 return (theName, theScore) }
為什麼說上述函數的返回值是secondHighScore元組呢?因為getAHighScore函數返回的元組元素個數、元素名稱、元素類型均和secondHighScore相同。
其實將元組作為函數的返回值時也可以不必對元素進行命名,只要你明白每個元素代表的含義即可:
func getAHighScore() -> (String, Int) { let theName = "Patricia" let theScore = 3894 return (theName, theScore) }
如果你不確定返回的元組一定不為nil,那麼你可以返回一個可選的元組類型:
func maybeGetHighScore() -> (String, Int)? { return nil }
因為是可選的元組類型,所以當返回的元組不為nil時,你需要對元組進行解包:
if let possibleScore = maybeGetHighScore() { possibleScore.0 possibleScore.1 } else { println("Nothing Here") }
注意:當你定義了一個沒有返回值的函數時,其實該函數是返回一個空的元組()。
元組的訪問級別
元組的訪問級別取決於它包含的元素。比如元組裡的元素都是private級別的,那麼該元組也是private級別的。但這裡有一個遵循最小的原則,也就是說如果一個元組中有兩個元素,一個為private級別,另一個為public級別,那麼該元組遵循最小原則,它的訪問級別為private。
元組是值類型
關於值類型和引用類型的知識這裡不再累贅,我們通過一個代碼示例來看看元組是哪種類型:
var someScore = ("John", 55) var anotherScore = someScore anotherScore.0 = "Robert" println(anotherScore.0) //Outputs: "Robert" println(someScore.0) //Outputs: "John"
通過上述的代碼示例可以看出,我把someScore元組賦值給了anotherScore,然後修改了anotherScore的第1個元素的值,最後分別打印了someScore和anotherScore第1個元素的值。someScore元組第一個元素的值為Robert,而anotherScore元組第一個元素的值仍然為John。由此可見元組是值類型。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對的支持。