【发布时间】:2017-05-11 16:31:12
【问题描述】:
我有一个基类,它实现了一个符合如下协议的扩展:
protocol OptionsDelegate {
func handleSortAndFilter(opt: Options)
}
extension BaseViewController: OptionsDelegate {
func handleSortAndFilter(opt: Options) {
print("Base class implementation")
}
}
我有一个继承自 BaseViewController 的子类“InspirationsViewController”。我在扩展中覆盖了协议方法,如下所示:
extension InspirationsViewController {
override func handleSortAndFilter(opt: Options) {
print("Inside inspirations")
}
}
当我在子类扩展中覆盖“handleSortAndFilter”函数时出现错误:“扩展中的Declarations cannot override yet”
但是当我实现 UITableView 数据源和委托方法时,我没有看到类似的问题。
如何避免这个错误?
【问题讨论】:
-
InspirationsViewController不是子类,它是扩展。我认为你定义错了。应该是类InspirationsViewController: BaseViewController -
@HossamGhareeb 他已经说过
InspirationsViewController是BaseViewController的子类,这是它的扩展。这个问题可能在 Swift 中没有实现,你应该从主类中重写,扩展是为了添加更多功能 -
在扩展中我们不能覆盖超类的方法。
-
请同时发布课程定义。添加
class BaseViewController: UIViewController{}和class InspirationsViewController: BaseViewController {}的代码在这里编译得很好。 -
@shallowThought,你提到的类声明是正确的。
标签: ios swift overriding protocols ios-extensions