Swift 集合型別 (Collection Types)

Swift 提供了三種主要的集合型別 (Collection Types) 來儲存數值的群組:陣列 (Arrays)、集合 (Sets) 與字典 (Dictionaries)。

這篇文章將作為 Swift 集合型別的總覽導引,你可以點擊各個章節連結深入了解詳細用法。

可變性 (Mutability)

Swift 的集合型別同樣遵循 varlet 的規則,這與 Objective-C 中需要區分 NSArrayNSMutableArray 不同:

  • 如果你將集合指派給一個變數 (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 集合型別的高效能。