willSelectRowAt和didSelectRow在Xcode 9 / Swift 4之后不再调用

时间:2017-11-07 22:54:25

标签: xcode uitableview swift4 xcode9

由于我已升级到Xcode 9 / Swift 4,我的某些UITableViewDelegate方法不再被调用

1 个答案:

答案 0 :(得分:0)

从Xcode 9 / Swift 4开始,所有Objective-C方法都应标记为@objc。编译器可以合理地识别它应该应用于何处,但是它并没有弄清楚继承。例如:

class Delegate: NSObject, UITableViewDelegate {
}

class SuperDelegate: Delegate {
    override func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? { return indexPath }
}

这不会产生任何警告,崩溃或构建错误。但是,在添加@objc

之前,系统不会调用您的行
@objc class SuperDelegate: Delegate {
    override func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? { return indexPath }
}