在 Swift 中,函式是我們很常用到的工具,但是如果我們將函式宣告為 static,在使用繼承來覆寫 static 函式時,通常都不能成功。但在實務上,我們有時會遇到要覆寫 static function,那又該如何才能覆寫 (override) 一個 static 的函式呢?很簡單,只要改用 class function 就可以了!
![[Swift] 覆寫 static function 不成功?改用 class function 吧! 1 swift](https://www.inote.tw/wp-content/uploads/2020/02/swift-1.png)
首先,先看一下我們的範例。
class A { static func print() { Swift.print("Hello A") } } class B: A { override static func print() { Swift.print("Hello B") } }
這時,編繹器很聰明的跳出「Cannot override static method」的警告了! 那我們該如何解呢?答案很簡單,將 static 改為 class 就好,以這一個例子如下:
class A { class func print() { Swift.print("Hello A") } } class B: A { override class func print() { Swift.print("Hello B") } }
這時我們的函式就被覆寫啦,是不是超級簡單的呢?而在 Swift 中,class function 在採用動態分配 (dynamically dispatched),所以速度會比 static function 慢,如果你沒有必要覆寫 static function 的話,還是使用 static function 就好了唷!