Swift 3: методы источника данных Tableview Переопределение метода неоткрытого экземпляра за пределами его определяющей ошибки модуля

У меня есть класс open BaseViewController в базовой структуре, в котором реализованы методы источника данных tableview. Допустим, у меня есть другой класс (вне модуля) ClassA с BaseViewController в качестве суперкласса. Когда я пытаюсь переопределить методы источника данных tableview, он выдает эту ошибку Overriding non-open instance method outside of its defining module.

BaseViewController выглядит так

open class BaseViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

...

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 0
}

public func numberOfSections(in tableView: UITableView) -> Int {
    return 0
}

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    return UITableViewCell()
  }
}

Класс А

import CustomCoreFramework

class ClassA : BaseViewController {

// throws an error
public override func numberOfSections(in tableView: UITableView) -> Int {
    return tableViewListItems.count
}

}

Я полагаю, что методы класса open должны быть доступны вне модуля. Я попытался изменить спецификаторы доступа к методам таблицы на public и другие комбинации, но, похоже, ничего не работает.


person Srujan Simha    schedule 18.08.2017    source источник
comment
может быть потому, что методы помечены как общедоступные, попробуйте удалить общедоступный один раз и проверить, но не уверен, хотя раньше не пробовал.   -  person Tushar Sharma    schedule 18.08.2017
comment
Вы должны наследовать BaseViewController — как следует из названия — от UIViewController, а не от UITableViewDelegate   -  person vadian    schedule 18.08.2017
comment
Следует ли объявлять методы BaseViewController открытыми?   -  person Xvolks    schedule 18.08.2017
comment
@vadian Да, я делаю это, просто забыл написать об этом в посте. Я обновил пост. Пожалуйста, проверьте.   -  person Srujan Simha    schedule 18.08.2017


Ответы (1)


Методы BaseViewController должны быть объявлены открытыми. Это обсуждается в ветке по ссылке.

См. Что такое ключевое слово "open" в Swift?

person Xvolks    schedule 18.08.2017
comment
Я пробовал это раньше, это не сработало, но теперь это сработало. Я не знаю почему!! Я рад, что это сработало, а также злюсь, потому что это не сработало раньше. Спасибо, в любом случае. - person Srujan Simha; 18.08.2017