我的基类实现了符合协议的扩展,如下所示:
protocol OptionsDelegate {
func handleSortAndFilter(opt: Options)
}
extension BaseViewController: OptionsDelegate {
func handleSortAndFilter(opt: Options) {
print("Base class implementation")
}
}
我是一个子类" InspirationsViewController"继承自BaseViewController。我在扩展中覆盖了协议方法,如下所示:
extension InspirationsViewController {
override func handleSortAndFilter(opt: Options) {
print("Inside inspirations")
}
}
当我覆盖" handleSortAndFilter"时,我收到错误子类扩展中的函数: "扩展中的疏散不能覆盖"
但是当我实现UITableView数据源和委托方法时,我没有看到类似的问题。
如何避免此错误?
答案 0 :(得分:16)
使用where子句的协议扩展。它有效。
class BaseViewController: UIViewController {
}
extension OptionsDelegate where Self: BaseViewController {
func handleSortAndFilter(opt: Options) {
print("Base class implementation")
}
}
extension BaseViewController: OptionsDelegate {
}
class InsipartionsViewController: BaseViewController {
}
extension OptionsDelegate where Self: InsipartionsViewController {
func handleSortAndFilter(opt: Options) {
print("Inspirations class implementation")
}
}
答案 1 :(得分:3)
据我所知,你无法覆盖扩展中的方法。扩展程序只能执行以下操作: “Swift中的扩展可以:
摘自:Apple Inc.“The Swift Programming Language(Swift 3.0.1)。”