Swift 集合型別 (Collection Types)
Swift 提供了三種主要的集合型別 (Collection Types) 來儲存數值的群組:陣列 (Arrays)、集合 (Sets) 與字典 (Dictionaries)。
這篇文章將作為 Swift 集合型別的總覽導引,你可以點擊各個章節連結深入了解詳細用法。
可變性 (Mutability)
Swift 的集合型別同樣遵循 var 和 let 的規則,這與 Objective-C 中需要區分 NSArray 和 NSMutableArray 不同:
- 如果你將集合指派給一個變數 (
var),它就是可變的 (可以新增、刪除或修改項目)。 - 如果你將集合指派給一個常數 (
let),它就是不可變的 (大小與內容都鎖定)。
陣列 (Arrays)
陣列是用來儲存有序且型別相同的數值。
var shoppingList: [String] = ["Eggs", "Milk"]
shoppingList.append("Flour")
print(shoppingList[0]) // Eggs
深入了解:陣列的操作與遍歷
集合 (Sets)
集合是用來儲存無序且唯一 (不重複) 的數值。當順序不重要,或者你需要確保資料不重複時,Set 是最佳選擇。Set 也支援高效的數學運算 (如交集、聯集)。
var genres: Set<String> = ["Rock", "Classical", "Rock"]
// 因為 Set 保證唯一性,"Rock" 只會出現一次
print(genres.count) // 2
深入了解:集合與集合運算
字典 (Dictionaries)
字典是用來儲存無序的鍵值對 (Key-Value Pairs)。你透過唯一的 Key 來尋找對應的 Value。
var airports: [String: String] = [
"TPE": "Taipei Taoyuan",
"NRT": "Tokyo Narita"
]
print(airports["TPE"]) // Optional("Taipei Taoyuan")
深入了解:字典的建立與操作
值型別與 Copy-on-Write
值得注意的是,Swift 的 Arrays, Sets 和 Dictionaries 都是 結構 (Structs),這意味著它們是 值型別 (Value Types)。
當你將一個陣列指派給另一個變數,或傳遞給函式時,它的內容會被複製 (Copied),而不是傳遞參考 (Reference)。
然而,Swift 實作了 Copy-on-Write (寫入時複製) 優化技術。這意味著,僅僅是「指派」或「傳遞」並不會立即發生實際的複製行為,直到你真的嘗試修改其中一個副本時,複製才會發生。這保證了 Swift 集合型別的高效能。