數(shù)組(Arrays)
數(shù)組是存儲為單個值的值的集合窗骑。例如,John漆枚,Paul创译,George和Ringo是名字,但是數(shù)組使您可以將它們分組為一個名為The Beatles的單一值墙基。
在代碼中软族,我們這樣寫:
let john = "John Lennon"
let paul = "Paul McCartney"
let george = "George Harrison"
let ringo = "Ringo Starr"
let beatles = [john, paul, george, ringo]
最后一行構(gòu)成數(shù)組:它以方括號開頭和結(jié)尾,數(shù)組中的每個項目均以逗號分隔残制。
您可以通過在方括號內(nèi)寫一個數(shù)字來從數(shù)組中讀取值立砸。數(shù)組位置從0開始計數(shù),因此初茶,如果您想閱讀“ Paul McCartney”颗祝,可以這樣寫:
beatles[1]
請注意:如果您閱讀不存在的項目,Swift就會崩潰。例如螺戳,嘗試閱讀beatles[9]不是一個好主意搁宾。
注:如果您使用類型注釋,陣列都寫在括號:[String]温峭,[Int]猛铅,[Double],和[Bool]凤藏。
集合(Sets)
集合是值的集合奸忽,就像數(shù)組一樣,區(qū)別在于它們有兩個區(qū)別:
- 1.物品不會以任何順序存儲揖庄;它們以有效的隨機順序存儲栗菜。
- 2.一組物品不能出現(xiàn)兩次。所有項目必須唯一蹄梢。
您可以直接從數(shù)組創(chuàng)建集合疙筹,如下所示:
let colors = Set(["red", "green", "blue"])
當(dāng)您查看colors
在Playground輸出中的值時,您會發(fā)現(xiàn)它與我們用來創(chuàng)建它的順序不匹配禁炒。它不是真正的隨機順序而咆,只是無序的 – Swift不保證其順序。由于它們是無序的幕袱,因此無法像使用數(shù)組一樣使用數(shù)字位置從集合中讀取值暴备。
如果您嘗試將重復(fù)項插入到集合中,則重復(fù)項將被忽略们豌。例如:
let colors2 = Set(["red", "green", "blue", "red", "blue"])
最終colors2
設(shè)置將僅包含紅色涯捻,綠色和藍(lán)色一次。
元組(Tuples)
元組允許您將多個值一起存儲在一個值中望迎。這聽起來像數(shù)組障癌,但是元組不同:
- 1.您不能在元組中添加或刪除項目;它們的大小是固定的辩尊。
- 2.您無法更改元組中的項目類型涛浙;它們始終具有與創(chuàng)建時相同的類型。
- 3.您可以使用數(shù)字位置或命名它們來訪問元組中的項目对省,但是Swift不會讓您讀取不存在的數(shù)字或名稱蝗拿。
通過將多個項目放在括號中來創(chuàng)建元組,如下所示:
var name = (first: "Taylor", last: "Swift")
然后蒿涎,您可以使用從0開始的數(shù)字位置訪問項目:
name.0
或者哀托,您可以使用其名稱訪問項目:
name.first
請記住,創(chuàng)建元組后可以更改其值劳秋,但不能更改值的類型仓手。因此胖齐,如果您嘗試將其更改name
為be (first: "Justin", age: 25)
,則會出現(xiàn)錯誤嗽冒。
數(shù)組呀伙、集合和元組的用法
數(shù)組,集合和元組乍一看似乎很相似添坊,但是它們有不同的用途剿另。為了幫助您知道要使用哪個,這里有一些規(guī)則贬蛙。
如果您需要一個特定的雨女,固定的相關(guān)值集合,其中每個項目都有一個精確的位置或名稱阳准,則應(yīng)使用一個元組:
let address = (house: 555, street: "Taylor Swift Avenue", city: "Nashville")
如果您需要一個必須唯一的值的集合氛堕,或者需要能夠非常快速地檢查其中是否有特定項目野蝇,則應(yīng)使用一組:
let set = Set(["aardvark", "astronaut", "azalea"])
如果您需要一個可以包含重復(fù)項的值的集合讼稚,或者項目的順序很重要,則應(yīng)使用一個數(shù)組:
let pythons = ["Eric", "Graham", "John", "Michael", "Terry", "Terry"]
到目前為止绕沈,數(shù)組是這三種類型中最常見的锐想。
字典(Dictionary)
字典就像數(shù)組一樣是值的集合,但是您不必使用整數(shù)位置存儲東西乍狐,而是可以使用所需的任何內(nèi)容來訪問它們痛倚。
存儲字典數(shù)據(jù)的最常見方法是使用字符串。例如澜躺,我們可以創(chuàng)建一個字典來存儲歌手的身高,并使用他們的名字:
let heights = [
"Taylor Swift": 1.78,
"Ed Sheeran": 1.73
]
就像數(shù)組一樣抒蚜,字典以方括號開頭和結(jié)尾掘鄙,并且每個項目都以逗號分隔。但是嗡髓,我們也使用冒號將要存儲的值(例如1.78)與要存儲在其下的標(biāo)識符(例如“ Taylor Swift”)分開操漠。
這些標(biāo)識符稱為key,您可以使用它們從字典中讀回數(shù)據(jù):
heights["Taylor Swift"]
注意:使用類型注釋時饿这,字典用括號括起來浊伙,在標(biāo)識符和值類型之間用冒號表示。例如
[String: Double]
和[String: String]
长捧。
如果您嘗試使用不存在的鍵從字典中讀取一個值嚣鄙,Swift將會發(fā)回您nil
(完全沒有)。盡管這可能是您想要的串结,但是還有另一種選擇:我們可以為字典提供一個默認(rèn)值哑子,以供我們在需要缺少鍵的情況下使用舅列。
為了演示這一點,讓我們?yōu)閮蓚€人創(chuàng)建一個喜愛的冰淇淋字典:
let favoriteIceCream = [
"Paul": "Chocolate",
"Sophie": "Vanilla"
]
我們可以這樣閱讀保羅最喜歡的冰淇淋:
favoriteIceCream["Paul"]
但是卧蜓,如果我們嘗試閱讀夏洛特最喜歡的冰淇淋帐要,則會得到零,這意味著Swift對該鍵沒有任何價值:
favoriteIceCream["Charlotte"]
我們可以通過將字典的默認(rèn)值設(shè)置為“未知”來解決此問題弥奸,以便在未找到夏洛特冰淇淋時榨惠,返回“未知”而不是nil:
favoriteIceCream["Charlotte", default: "Unknown"]
創(chuàng)建空集合
數(shù)組,集合和字典稱為集合盛霎,因為它們將值集中在一起赠橙。
如果要創(chuàng)建一個空集合,只需寫出它的類型摩渺,然后用括號括起來简烤。例如,我們可以創(chuàng)建一個空字典摇幻,其中包含用于鍵和值的字符串横侦,如下所示:
var teams = [String: String]()
然后我們可以稍后添加條目,如下所示:
teams["Paul"] = "Red"
同樣绰姻,您可以創(chuàng)建一個空數(shù)組來存儲整數(shù)枉侧,如下所示:
var results = [Int]()
例外是創(chuàng)建一個空集合,是通過不同的方式完成的:
var words = Set<String>()
var numbers = Set<Int>()
這是因為Swift僅對字典和數(shù)組具有特殊的語法狂芋;其他類型必須使用尖括號語法(例如set)榨馁。
如果需要,可以使用類似的語法創(chuàng)建數(shù)組和字典:
var scores = Dictionary<String, Int>()
var results = Array<Int>()
枚舉(Enumerations)
枚舉是一組相關(guān)的值定義了一個共同的類型帜矾,使你可以在你的代碼中以類型安全的方式來使用這些值翼虫。
例如,如果您想編寫一些代碼來表示正在執(zhí)行的某些工作的成功或失敗屡萤,則可以將其表示為字符串:
let result = "failure"
但是珍剑,如果有人不小心使用了不同的命名會怎樣?
let result2 = "failed"
let result3 = "fail"
這三個都是不同的字符串死陆,所以它們的含義不同招拙。
使用枚舉,我們可以定義一個Result可以為successor 的類型failure措译,如下所示:
enum Result {
case success
case failure
}
現(xiàn)在别凤,當(dāng)我們使用它時,我們必須選擇以下兩個值之一:
let result4 = Result.failure
這樣可以防止您每次意外使用不同的字符串领虹。
除了存儲簡單值之外规哪,枚舉還可以存儲附加到每種情況的關(guān)聯(lián)值。這使您可以將附加信息附加到枚舉掠械,以便它們可以代表更多細(xì)微差別的數(shù)據(jù)由缆。
例如注祖,我們可以定義一個存儲各種活動的枚舉:
enum Activity {
case bored
case running
case talking
case singing
}
這些枚舉值告訴我們說有人在說話,但我們不知道他們在說什么均唉,或者我們可以知道有人正在跑步是晨,但我們不知道他們跑到哪里去。
枚舉關(guān)聯(lián)值使我們可以添加以下其他詳細(xì)信息:
enum Activity {
case bored
case running(destination: String)
case talking(topic: String)
case singing(volume: Int)
}
現(xiàn)在我們可以更精確了–我們可以說有人在談?wù)撟闱颍?/p>
let talking = Activity.talking(topic: "football")
有時您需要能夠為枚舉賦值舔箭,以便它們具有含義罩缴。這使您可以動態(tài)創(chuàng)建它們,并以不同方式使用它們层扶。
例如箫章,您可以創(chuàng)建一個Planet
枚舉,用于存儲每種情況的整數(shù)值:
enum Planet: Int {
case mercury
case venus
case earth
case mars
}
Swift會自動為每個數(shù)字分配一個從0開始的數(shù)字镜会,您可以使用該數(shù)字創(chuàng)建適當(dāng)?shù)拿杜e大小寫的實例檬寂。例如,earth
將被賦予數(shù)字2戳表,因此您可以這樣編寫:
let earth = Planet(rawValue: 2)
如果需要桶至,可以為一個或多個案例指定一個特定的值,Swift會生成其余的案例匾旭。我們認(rèn)為地球是第二個行星并不是很自然镣屹,因此您可以這樣寫:
enum Planet: Int {
case mercury = 1
case venus
case earth
case mars
}
現(xiàn)在,Swift將分配1到mercury
上价涝,并從那里開始向上計數(shù)女蜈,這意味著earth現(xiàn)在是第三顆行星。
總結(jié)
- 1.數(shù)組色瘩,集合伪窖,元組和字典可讓您在單個值下存儲一組項目。它們各自以不同的方式執(zhí)行此操作居兆,因此您使用哪種方法取決于所需的行為惰许。
- 2.數(shù)組按添加順序存儲項目,并使用數(shù)字位置訪問它們史辙。
- 3.集合設(shè)置存儲項目時沒有任何順序,因此您不能使用數(shù)字位置訪問它們佩伤。
- 4.元組的大小是固定的聊倔,您可以在每個項目中附加名稱。您可以使用數(shù)字位置或名稱來讀取項目生巡。
- 5.詞典根據(jù)鍵存儲項目耙蔑,您可以使用這些鍵讀取項目。
- 6.枚舉是對相關(guān)值進(jìn)行分組的一種方式孤荣,因此您可以使用它們而不會出現(xiàn)拼寫錯誤甸陌。
- 7.您可以將原始值附加到枚舉须揣,以便可以從整數(shù)或字符串創(chuàng)建它們,也可以添加關(guān)聯(lián)的值以存儲有關(guān)每種情況的其他信息钱豁。