Это новое поведение я столкнулся при обновлении моего проекта к быстрому 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
Я попытался упростить пример, предоставив свой собственный протокол и класс «table», но я не мог заставить его вести себя одинаково снова. Это заставляет меня думать, что наблюдаемое поведение в этом примере не ожидается и на самом деле ошибка.
Неужели кто-нибудь еще сталкивался с тем же (или подобным) вопросом? Я подумал, что стоит спросить, если это поможет кому угодно.
Почему у вашего делегата tableview есть экземпляр табличного представления? Это не имеет большого смысла – Alexander