iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
Mobile Development

我將點燃Swiftの大海系列 第 9

Day9. Swift一定要會の基礎語法

  • 分享至 

  • xImage
  •  

我們在實作過程中一定會用到的,就是用來儲存資料的 「容器」。
有寫過其他程式語言的人,應該都聽過 class 類別 這個東西
而在 Swift 中,除了 class 之外,還有一個常用的 struct 結構體。

今天我們就來看看這兩個家伙的用法,順便比較一下它們的差別吧!

class

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

struct 也是用來定義自訂型別的,但它是值型別(value type)。
這代表每次你把它賦值給另一個變數時,它會複製一份新的資料,而不是跟原本的共用。

適合用在:

  • 資料量小、輕量的資料模型
  • 不需要繼承,但需要確保資料安全、不會被其他地方更改

格式

struct 結構體名稱 {
    var 屬性名稱: 型別
    
    func 方法名稱() {
        // 這裡寫功能
    }
}

範例

struct Fruit {
    var name: String
    
    func introduce() {
        print("這是一顆\(name)")
    }
}

var grape = Fruit(name: "葡萄")
grape.introduce() // ➜ 輸出:這是一顆葡萄

共通點 vs.相異處

我們最後來統整他們的共通點和相異處來更了解它們吧!

共通點

  • 都可以擁有屬性和方法
  • 都可以有初始化器
  • 都可以遵守協議(protocol)
  • 都能擁有多個實例(object/instance)

相異處

class struct
型別 參考型別(Reference Type) 值型別(Value Type)
資料傳遞 多個變數指向同一個物件 複製時會建立全新副本
繼承 可以 不可以
自動初始化器 需要自己寫(除非所有屬性都有預設值) Swift 會自動產生
釋放機制 有 ARC(自動記憶體管理) 無 ARC,直接釋放

結論

在 Swift 中,struct 其實比你想像的還常用,因為它的值型別特性可以避免很多資料被意外修改的情況(像 StringArrayDictionary全都是 struct)。
class 比較適合用在需要共享狀態、或是繼承多個子類別的情況。

如果你需要繼承或是物件之間共享同一份資料,就用 class
如果你只需要一個簡單、獨立的資料結構,而且希望複製時互不影響,就用 struct

一句話記:

不需要繼承就用 struct,要繼承或共享資料就用 class!


上一篇
Day8. Swift一定要會の基礎語法
下一篇
Day10. Swift一定要會の基礎語法
系列文
我將點燃Swiftの大海10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言