扩展中的声明无法覆盖

时间:2017-09-20 20:39:33

标签: ios swift

我查看了Declarations in extensions cannot override yet error in Swift 4

就我而言:

我有如下的BaseViewController:

class BaseViewController: UIViewController {
    func extFunction() {
        print("extFunction")
    }
}

拥有另一个视图控制器

class TestViewController : BaseViewController {
    override func extFunction() { // getting error in this line
        print("extFunction from TestViewController")
    }
}

更新 - 我现在已将其更改为:

class BaseViewController: UIViewController {
    func extFunction() {
        print("extFunction")
    }
}

拥有另一个视图控制器

class TestViewController : BaseViewController {
    override func extFunction() { // getting error in this line
        print("extFunction from TestViewController")
    }
}

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

错误信息非常清楚(尽管有些可疑的语法):

  

扩展声明无法覆盖

您无法覆盖在扩展程序中声明的函数('然而这意味着在未来的Swift版本中可能会这样)。

如果您希望能够覆盖extFunction,则必须在BaseViewController本身声明,而不是在扩展程序中声明。

答案 1 :(得分:0)

(糟糕的)解决方法是在BaseViewController中声明另一个函数

func altExtFunc() {
    print("overridable extFunction")
}

并将extFunction更改为

func extFunction() {
    altExtFunc()
}

然后在TestViewController中

override func altExtFunc() {
    super.altExtFunc()
    // more stuff here
}