我有一个基类,实现了符合以下协议(protocol)的扩展:

protocol OptionsDelegate {
    func handleSortAndFilter(opt: Options)
}

extension BaseViewController: OptionsDelegate {
    func handleSortAndFilter(opt: Options) {
        print("Base class implementation")
    }
}

我有一个继承自BaseViewController的子类“InspirationsViewController”。我在扩展中覆盖协议(protocol)方法,如下所示:
extension InspirationsViewController {
    override func handleSortAndFilter(opt: Options) {
        print("Inside inspirations")
    }
}

当我在子类扩展中覆盖“handleSortAndFilter”函数时遇到错误:“扩展中的小数位数还不能覆盖”

但是当我实现UITableView数据源和委托(delegate)方法时,没有看到类似的问题。

如何避免这个错误?

最佳答案

将协议(protocol)扩展与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")
  }
}

07-27 13:59