Modifying An Array

在 Swift 中,可以對 Array 進行修改,例如:

var shoppingList = ["Egg", "Milk"]
println(shoppingList[0])
// 輸出結果為 : "Egg"

shoppingList += "Flour"
// shoppingList 變成 :["Egg", "Milk", "Flour"]

shoppingList += ["Cheese", "Butter", "Chocolate Spread"]
// shoppingList 變成 :["Egg", "Milk", "Flour", "Cheese", "Butter", "Chocolate Spread"]

shoppingList[0] = "Six Egg"
// shoppingList 變成 :["Six Egg", "Milk", "Flour", "Cheese", "Butter", "Chocolate Spread"]

當然我們也可以取代一個範圍內的元素,例如:

shoppingList[3...5] = ["Bananas", "Apples"]
// shoppingList 變成 :["Six Egg", "Milk", "Flour", "Bananas", "Apples"]

Modifying a Dictionary

在 Swift 中,可以對 Dictionary 進行修改,例如:

var numberOfLegs = ["ant" : 6, "snake" : 0, "cheetah" : 4]

numberOfLegs["spider"] = 273
// ["ant" : 6, "snake" : 0, "cheetah" : 4, "spider" : 273]

除了新增之外,也可以很簡單的修改 Dictionary 的內容:

numberOfLegs["spider"] = 8
// ["ant" : 6, "snake" : 0, "cheetah" : 4, "spider" : 8]

Retrieving a Value from a Dictionary

Dictionary 中取出指定的 value,基本方法如下:

var numberOfLegs = ["ant" : 6, "snake" : 0, "cheetah" : 4]
let possibleLegCount = numberOfLegs["aardvark"]

但是在 numberOfLegs 卻沒有"aardvark",那就會回傳空的值,這樣該如何是好呢?

Querying an Optional

如果我們取出的 value 不一定存在怎麼辦?以上的例子中,aardvark 是不存在的,因此 Swift 提供了 ? 符號,讓開發者可以 mark (標示)說,這個值不一定存在,是 optional 的。

var numberOfLegs = ["ant" : 6, "snake" : 0, "cheetah" : 4]
let possibleLegCount: Int? = numberOfLegs["aardvark"]

if possibleLegCount == nil {
   println("Aardvark wasn't found")
} else {
   let legCount: Int = possibleLegCount!
   println("An aardvark has \(legCount) legs")
}

除此之外,還有更安全更簡單的寫法

if let legCount = possibleLegCount {
   println("An aardvark has \(legCount) legs")
}

這段程式碼是做 Unwrapping 的動作 (更多資訊請參考:Optional Type),表示:如果 possibleLegCount 有值,就幫我輸入到 legCount,並且輸出 legCount,如果沒有 possibleLegCount 值,那就跳過。

New Value Semantics for Arrays

從 XCode 6 Beta 3 之後,let 可以使得 array 變成 immutable array,也就是說,array 的元素也不能被修改。

let shoppingList = ["Egg", "Milk"]
shoppingList[0] = "Cookie"  //error! shoppingList is immutable

下一篇: If and Switch Statement