iT邦幫忙

2025 iThome 鐵人賽

DAY 12
0
Mobile Development

Swift iOS 開發新手村:從入門到 AI 聊天室系列 第 12

Day 12|Swift 類別與結構:從零打造完美的資料藍圖

  • 分享至 

  • xImage
  •  

昨天,我們學會了如何用 函式(Functions) 來打造可重複使用的「程式積木」,將特定的功能打包起來。

但如果我們想描述一個真實世界的物件,例如一位「玩家」,他不僅有資料(名字、等級),還有功能(攻擊、回血),該怎麼辦?

今天,我們就要從打造「功能積木」升級為繪製「物件藍圖」!我們將學習 Swift 中用來創造自訂資料型別的兩大核心:struct(結構體) 和 class(類別)。學會它們,你就能將資料與功能完美地打包在一起,為任何事物建立清晰的模型。

今日學習重點

  • 基本語法:學習 structclass 的宣告、實體化與屬性存取
  • 核心差異:理解 值型別(Value Type)參考型別(Reference Type) 的根本不同
  • 恆等運算子:學會使用 ===!== 來判斷兩個參考是否指向同一個實體
  • 選擇的藝術:掌握何時該用 struct、何時該用 class 的設計原則

類別與結構的基本語法

struct Point {
    var x = 0.0
    var y = 0.0
}

class Car {
    var brand: String?
    var year: Int?
}

實體化與屬性存取

定義好後,就可以透過「實體化」創造具體的物件,並使用點語法來存取屬性:

let origin = Point()
let myCar = Car()

print(origin.x) // 0.0

myCar.brand = "Tesla"
print(myCar.brand ?? "未知品牌") // "Tesla"

結構特有的「成員逐一建構器」

結構有系統自動提供的建構器,可以直接指定每個屬性:

let myPoint = Point(x: 10, y: 20)
print(myPoint.x) // 10.0

類別沒有這個自動生成的成員逐一建構器功能。

結構是「值型別」(Value Type)

複製的是資料本身,各自獨立:

var a = Point(x: 10, y: 20)
var b = a
b.y = 50

print(a.y) // 20.0

類別是「參考型別」(Reference Type)

複製的是「參考」,會共用同一份資料:

let myCar = Car()
myCar.brand = "Honda"

let sameCar = myCar
let anotherCar = Car()
anotherCar.brand = "Honda"

if myCar === sameCar {
    print("myCar 和 sameCar 是同一個實體") 
}

if myCar !== anotherCar {
    print("myCar 和 anotherCar 是不同的實體") 
}
  • ===:判斷是否為同一個實體
  • !==:判斷是否不是同一個實體

== 用於判斷兩個值是否相等,而 === 則用於判斷兩個參考是否指向同一個實體

選擇使用類別或結構的原則

Swift 建議:能用 struct 就用 struct,除非有這些需求:

使用 class 的情況:

  • 需要繼承功能
  • 多個地方要共用同一個物件
  • 要在物件釋放前清理資源
  • 希望多個變數共享同一份資料

使用 struct 的情況:

  • 資料簡單,希望互相獨立
  • 屬性都是值型別
  • 想要安全、輕量的資料模型

小結一下

今天我們掌握了 Swift 中用來打造自訂資料型別的兩大藍圖:struct(結構體) 與 class(類別)。我們學會了如何定義它們、建立實體,並存取其內部的屬性。

最重要的是,我們深入理解了兩者最根本的差異:「struct 是值型別,複製時各自獨立;class 是參考型別,複製時共享同一份資料」。同時,我們也學會了如何用 === 判斷實體同一性,並掌握了在不同情境下如何做出正確的選擇。

🌟 明天預告

我們已經學會用 structclass 來打包「資料」,但如果連「功能」本身都能打包,放進背包隨身攜帶,甚至當作參數傳遞呢?

這就是 Swift 的一項超強武器: 閉包 (Closure)!閉包能讓我們把一段程式碼(也就是功能)像 IntString 一樣裝進變數裡,隨傳隨用。

明天,你將學會如何定義和使用這種「匿名的便攜式函式」,並見識它如何讓陣列的排序、篩選等操作變得無比精煉。準備好讓你的程式碼變得更靈活、更強大吧!

敬請期待《Day 13|Swift 閉包入門:寫出精煉又強大的程式!》


上一篇
Day 11|Swift 函式大解析:打造可重複使用的程式積木!
下一篇
Day 13|Swift 閉包入門:寫出精煉又強大的程式!
系列文
Swift iOS 開發新手村:從入門到 AI 聊天室16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言