我們在實作過程中一定會用到的,就是用來儲存資料的 「容器」。
有寫過其他程式語言的人,應該都聽過 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!