2016-10-11 2 views
0

Это новое поведение я столкнулся при обновлении моего проекта к быстрому 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», но я не мог заставить его вести себя одинаково снова. Это заставляет меня думать, что наблюдаемое поведение в этом примере не ожидается и на самом деле ошибка.

Неужели кто-нибудь еще сталкивался с тем же (или подобным) вопросом? Я подумал, что стоит спросить, если это поможет кому угодно.

+0

Почему у вашего делегата tableview есть экземпляр табличного представления? Это не имеет большого смысла – Alexander

ответ

0

Для тех, кто приземлился здесь: Похоже, что это была настоящая ошибка, зафиксированная быстрой командой. Для получения дополнительной информации см. https://bugs.swift.org/browse/SR-2919

Смежные вопросы