覆盖非动态类delaration

UnR*_*ewa 8 declaration uitableview ios swift xcode8

使用新的Xcode 8.3,我收到错误:

无法覆盖扩展中的非动态类声明

在代码行

 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
Run Code Online (Sandbox Code Playgroud)

我怎么能避免这个警告?

小智 11

扩展可以向类型添加新功能,但它们不能覆盖现有功能。

您有两个选择:

  1. 在类范围内移动您的方法,而不是扩展。

  2. dynamic类型添加到您的方法(定义它的地方),例如示例。

例子:

@objc open dynamic func onLog(_ message: String) -> Void {
    print("Info: \(message)");
}
Run Code Online (Sandbox Code Playgroud)


小智 5

这意味着,您不能像扩展中的超类委托方法那样重写。您可以通过mv扩展重写方法来声明子类。

final class DEMO, UITableViewDataSource, UITableViewDelegate { 
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return sectionHeader
}

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 40
}
Run Code Online (Sandbox Code Playgroud)

}