iT邦幫忙

2025 iThome 鐵人賽

DAY 10
0
Mobile Development

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

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

  • 分享至 

  • xImage
  •  

今天我們來介紹 Swift 裡一個超實用的功能 — extension 擴展
在寫程式的過程中, 你可能會遇到一個情況:
「我想幫一個已經寫好的型別,加上一些我自己想要的方法或功能,但又不想去改原本的程式碼!」
這時候 extension 就是你的救星啦!

它可以幫助我們:

  1. 延伸既有型別的功能(不管是系統內建的還是自己定義的)。
  2. 保持程式碼的結構清晰,避免修改原始程式碼造成不必要的風險。
  3. 分檔維護,讓功能模組化。

格式

extension 型別名稱 {
    // 新增的方法、計算屬性等等
}

範例

我們來幫 String 這個型別加上一個方法,可以回傳它是不是一種水果名稱。

extension String {
    func isFruit() -> Bool {
        let fruits = ["apple", "banana", "grape", "orange"]
        return fruits.contains(self.lowercased())
    }
}

// 使用範例
let name1 = "apple"
let name2 = "car"

print(name1.isFruit()) // true
print(name2.isFruit()) // false

這樣一來,不管什麼字串,你都可以直接 .isFruit() 來判斷它是不是水果,超方便!

Extension 常見用法

1. 新增方法

除了上面的例子,你還可以新增任何自訂功能:

extension Int {
    func toFruitPrice() -> String {
        return "\(self) 元"
    }
}

let applePrice = 10
print(applePrice.toFruitPrice()) // "10 元"

使用方法就是 變數名.func名

2. 新增計算屬性(Computed Property)

你可以幫型別加上計算屬性(注意:不能新增儲存屬性)

extension Double {
    var half: Double {
        return self / 2
    }
}

let price = 20.0
print(price.half) // 10.0

3. 分類功能(讓程式碼更整潔)

假設我們有一個 Fruit struct,可以用 extension 把功能分成多個區塊。

struct Fruit {
    var name: String
    var price: Int
}

// 基本描述功能
extension Fruit {
    func description() -> String {
        return "\(name) 價格是 \(price) 元"
    }
}

// 價格判斷功能
extension Fruit {
    func isExpensive() -> Bool {
        return price > 50
    }
}

let banana = Fruit(name: "香蕉", price: 60)
print(banana.description()) // "香蕉 價格是 60 元"
print(banana.isExpensive()) // true

注意事項

  1. extension 不能新增儲存屬性(只能新增方法、計算屬性、便利初始化器等)。
  2. 可以用在 系統型別(像 StringIntArray)或自訂型別。
  3. 常用在分檔管理,讓功能模組化

結論

extension 就像是在現有的程式碼外面「加掛外掛」,不用動原本的程式碼,就能讓它變得更強大。
它的常見用途包含 新增方法、計算屬性、分類功能、協議實作 等等。


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

尚未有邦友留言

立即登入留言