UITableViewDelegate 和 UITableviewDataSource:无法覆盖扩展中的非动态 class 声明 - Swift 4
UITableViewDelegate and UITableviewDataSource : Cannot override a non-dynamic class declaration from an extension - Swift 4
我正在尝试重写 extension.The 中的 UITableViewDelegate 方法,基础 class 已经实现了这些方法。请在下面找到详细信息:
Base Class:
class BaseTableViewController:UITableViewDelegate,UITableViewDataSource{
//Base Class. The delegate and datasource methods has been implemented
}
class ChildViewController: BaseTableViewController{
//Inherited class
}
extension ChildViewController {
//Trying to override the Tableview Delegate and Datasource methods but getting error.
}
错误详情:
我正在尝试将 Swift 3.0 转换为 Swift 4.0。
该实现在 Swift 3.0 中运行良好,但在 Swift 4.0 中出现错误。
我查看了以下链接:
Override non-dynamic class delaration
请建议上述实施的正确方法。
正确的方法似乎是覆盖 class 内部协议的方法,而不是扩展:
class BaseTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
...
}
}
class ChildViewController: BaseTableViewController {
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
...
}
}
扩展旨在添加 新功能,而不是覆盖现有功能。另一种方法是将这些功能委托给外部对象。
我正在尝试重写 extension.The 中的 UITableViewDelegate 方法,基础 class 已经实现了这些方法。请在下面找到详细信息:
Base Class:
class BaseTableViewController:UITableViewDelegate,UITableViewDataSource{
//Base Class. The delegate and datasource methods has been implemented
}
class ChildViewController: BaseTableViewController{
//Inherited class
}
extension ChildViewController {
//Trying to override the Tableview Delegate and Datasource methods but getting error.
}
错误详情:
我正在尝试将 Swift 3.0 转换为 Swift 4.0。 该实现在 Swift 3.0 中运行良好,但在 Swift 4.0 中出现错误。
我查看了以下链接: Override non-dynamic class delaration
请建议上述实施的正确方法。
正确的方法似乎是覆盖 class 内部协议的方法,而不是扩展:
class BaseTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
...
}
}
class ChildViewController: BaseTableViewController {
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
...
}
}
扩展旨在添加 新功能,而不是覆盖现有功能。另一种方法是将这些功能委托给外部对象。