我們在實作過程中一定會用到的,就是用來儲存資料的 「容器」。
有寫過其他程式語言的人,應該都聽過 class 類別 這個東西
而在 Swift 中,除了 class 之外,還有一個常用的 struct 結構體。
今天我們就來看看這兩個家伙的用法,順便比較一下它們的差別吧!
class是 Swift 中一種用來定義物件藍圖的型別。
它可以包含屬性properties、方法methods、初始化器initializer等等
甚至可以繼承其他類別的功能。
簡單來說:
class 類別名稱 {
    // 屬性(變數)
    var 屬性名稱: 型別
    
    // 初始化方法
    init(參數: 型別) {
        self.屬性名稱 = 參數
    }
    
    // 函數(function)
    func 函數名稱() {
        // 這裡寫功能
    }
}
class Fruit {
    var name: String
    
    init(name: String) {
        self.name = name
    }
    
    func introduce() {
        print("這是一顆\(name)")
    }
}
let apple = Fruit(name: "蘋果")
apple.introduce() // ➜ 輸出:這是一顆蘋果
struct 也是用來定義自訂型別的,但它是值型別(value type)。
這代表每次你把它賦值給另一個變數時,它會複製一份新的資料,而不是跟原本的共用。
適合用在:
struct 結構體名稱 {
    var 屬性名稱: 型別
    
    func 方法名稱() {
        // 這裡寫功能
    }
}
struct Fruit {
    var name: String
    
    func introduce() {
        print("這是一顆\(name)")
    }
}
var grape = Fruit(name: "葡萄")
grape.introduce() // ➜ 輸出:這是一顆葡萄
我們最後來統整他們的共通點和相異處來更了解它們吧!
| class | struct | |
|---|---|---|
| 型別 | 參考型別(Reference Type) | 值型別(Value Type) | 
| 資料傳遞 | 多個變數指向同一個物件 | 複製時會建立全新副本 | 
| 繼承 | 可以 | 不可以 | 
| 自動初始化器 | 需要自己寫(除非所有屬性都有預設值) | Swift 會自動產生 | 
| 釋放機制 | 有 ARC(自動記憶體管理) | 無 ARC,直接釋放 | 
在 Swift 中,struct 其實比你想像的還常用,因為它的值型別特性可以避免很多資料被意外修改的情況(像 String、Array、Dictionary全都是 struct)。
而 class 比較適合用在需要共享狀態、或是繼承多個子類別的情況。
如果你需要繼承或是物件之間共享同一份資料,就用 class。
如果你只需要一個簡單、獨立的資料結構,而且希望複製時互不影響,就用 struct。
一句話記:
不需要繼承就用 struct,要繼承或共享資料就用 class!