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