Типы дженериков в подклассах VIPER. Невозможно присвоить значение типа ChildType типу ParentType <Any>? - PullRequest
0 голосов
/ 07 мая 2019

У меня есть архитектура VIPER, и я хочу создать родительский компонент поиска VIPER, который работает с универсальным типом.Идея проста, поэтому у меня есть панель поиска, и у меня есть вид таблицы.Например, я могу показывать названия напитков или продуктов в виде таблицы.Зависит от того, какой тип общих данных я указал, я хочу показать или продукты или напитки.

Я нашел очень хороший пример , который решает мою проблему с контроллерами универсального представления.Но я хочу создать нечто подобное для быстрой общей архитектуры VIPER.

Я пропущу описание всех классов VIPER, таких как (Router, Interdictor и т. Д.).

Итак, у меня есть родительское представлениеконтроллер:

BaseSearchViewController: UIViewController {
   var presenter: BaseSearchPresenter<Any>?
}

и дочерний:

FoodSearchViewController: BaseSearchViewController {
}

Это родительский презентатор, указанный в BaseSearchViewController

class BaseSearchPresenter<T> {
    var items [T]
}

также у меня есть детектор поиска детского питания с определеннымТип еды, который я хотел бы отобразить в моей таблице:

class FoodSearchPresenter: BaseSearchPresenter<Food> {
}

Когда я пытаюсь настроить свой VIPER:

let viewController = FoodSearchViewController(...) // init VC
let presenter = FoodSearchPresenter()

viewController.presenter = presenter // assigning child FoodSearchPresenter instance to a BaseSearchViewController presenter variable leads to this error:

Cannot assign value of type 'FoodSearchPresenter' to type 'BaseSearchPresenter<Any>?'

Вот репо с проблемой.

1 Ответ

1 голос
/ 07 мая 2019

Я оставил комментарии о том, как решить эту проблему, но в вашем конкретном случае ответ заключается в том, что BaseSearchViewController должен быть универсальным.1004 * как своя вещь.Не наследуй ни от чего, кроме UIViewController.Затем создайте второй контроллер вида, который будет иметь смысл в этом приложении и потребует чего-то подобного. Тогда извлеките общность между ними.Это приведет вас в правильном направлении.

...