Swift 擴展 (Extensions)
擴展 (Extension) 就是為現有的類別、結構、列舉或協定型別,添加新功能。
即便你沒有該型別的原始程式碼 (例如是 Apple 的內建型別 Int 或第三方庫的類別),你依然可以擴展它。這類似於 Objective-C 的 Category。
擴展能做什麼?
- 添加計算屬性 (Computed Properties)
- 添加方法 (Instance / Type Methods)
- 添加新的建構器 (Initializers)
- 定義並使用新的巢狀型別 (Nested Types)
- 讓現有型別遵循某個協定 (Conform to Protocols)
注意:擴展不能添加新的儲存屬性 (Stored Properties)。
語法
使用 extension 關鍵字:
extension Double {
var km: Double { return self * 1_000.0 }
var m: Double { return self }
var cm: Double { return self / 100.0 }
}
let threeFeet = 91.44.cm
print("三英尺是 \(threeFeet) 公尺")
為方法擴展
extension Int {
func repetitions(task: () -> Void) {
for _ in 0..<self {
task()
}
}
}
3.repetitions {
print("Hello!")
}
// 輸出三次 Hello!
透過擴展遵循協定
這是保持程式碼整潔的好習慣。你可以將「遵循某協定」的相關實作代碼,單獨放在一個 Extension 中,而不是全部擠在主要的 Class 定義裡。
struct Employee {
var name: String
}
extension Employee: CustomStringConvertible {
var description: String {
return "員工姓名:\(name)"
}
}