[Swift] 覆寫 static function 不成功?改用 class function 吧!

在 Swift 中,函式是我們很常用到的工具,但是如果我們將函式宣告為 static,在使用繼承來覆寫 static 函式時,通常都不能成功。但在實務上,我們有時會遇到要覆寫 static function,那又該如何才能覆寫 (override) 一個 static 的函式呢?很簡單,只要改用 class function 就可以了!

swift

首先,先看一下我們的範例。

  1. class A {
  2.  
  3. static func print() {
  4. Swift.print("Hello A")
  5. }
  6.  
  7. }
  8.  
  9. class B: A {
  10.  
  11. override static func print() {
  12. Swift.print("Hello B")
  13. }
  14. }
  15.  

這時,編繹器很聰明的跳出「Cannot override static method」的警告了! 那我們該如何解呢?答案很簡單,將 static 改為 class 就好,以這一個例子如下:

  1. class A {
  2.  
  3. class func print() {
  4. Swift.print("Hello A")
  5. }
  6.  
  7. }
  8.  
  9. class B: A {
  10.  
  11. override class func print() {
  12. Swift.print("Hello B")
  13. }
  14. }

這時我們的函式就被覆寫啦,是不是超級簡單的呢?而在 Swift 中,class function 在採用動態分配 (dynamically dispatched),所以速度會比 static function 慢,如果你沒有必要覆寫 static function 的話,還是使用 static function 就好了唷!

發表迴響