final是Swift中限制繼承與重寫的關鍵字,可修飾類、屬性、方法、下標。
• final class → 不可被繼承
• final var/func/subscript → 不可被重寫
final class Person {
var name: String
final var age: Int
final func description() -> String { return "\(name) 年齡是: \(age)" }
final class func printClass() { print("Person 打印...") }
init(name: String, age: Int) { self.name = name; self.age = age }
}
class Student: Person { // 編譯錯誤:Inheritance from a final class 'Person'
var school: String
override func description() -> String { ... } // 錯誤:Instance method overrides a 'final' instance method
override class func printClass() { ... } // 錯誤:Class method overrides a 'final' class method
override var age: Int { ... } // 錯誤:Var overrides a 'final' var
}
| final修飾目標 | 違規操作 | 編譯錯誤信息 |
|---|---|---|
| 類 | 繼承 | Inheritance from a final class |
| 屬性 | 重寫 | Var overrides a 'final' var |
| 實例方法 | 重寫 | Instance method overrides a 'final' instance method |
| 類方法 | 重寫 | Class method overrides a 'final' class method |
final實體進行靜態分發、內聯優化,消除動態派發開銷「默認給類、關鍵方法加
final,只有確需擴展時再移除。」—— 這是Protocol-Oriented Programming時代的防禦性設計原則。
合理使用final,讓代碼結構更清晰、運行更高效、意圖更明確。