这是我在将项目更新为swift 3时遇到的新行为。在像这个示例的“子”类中实现UITableViewDelegate的方法
class A: NSObject, UITableViewDelegate {
var tableView = UITableView()
override init() {
super.init()
tableView.delegate = self
}
}
class B: A {
var count = 0
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
count += 1
}
}
方法didSelectRowAt
永远不会被调用:
let b = B()
b.tableView.delegate!.tableView?(b.tableView, didSelectRowAt: IndexPath())
b.count // => 0
但是,如果我在父项中实现该方法并在子项中覆盖它,那么它将开始工作:
class A: NSObject, UITableViewDelegate {
var tableView = UITableView()
override init() {
super.init()
tableView.delegate = self
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
}
}
class B: A {
var count = 0
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
count += 1
}
}
let b = B()
b.tableView.delegate!.tableView?(b.tableView, didSelectRowAt: IndexPath())
b.count // => 1
我尝试通过提供自己的协议和“表”类来更简化示例,但我无法让它再次以相同的方式运行。这使我相信在这个例子中观察到的行为不是预期的,实际上是一个错误。
是否还有其他人遇到相同(或类似)的问题?我认为值得问一下这可以帮助任何人。
答案 0 :(得分:0)
对于任何登陆此处的人:看起来这是一个由快速团队修复过的真正的错误。有关详细信息,请参阅https://bugs.swift.org/browse/SR-2919