2015-09-20 2 views
5

Я изучаю дженерики в быстром. И не понимаю, что происходит не так.Generic swift IOS "не является подтипом" ошибки компиляции кода

Кто-нибудь, пожалуйста, объясните, как я могу вставить общий шаблон в другой шаблон.

Декларация BasePresenter класса выглядит

class BasePresenter<VIEW : BaseView>{ 

кода с ошибкой ниже на картинке:

*UPD*

+0

Почему вы объявили выступающему в качестве массив? Любые причины? Похоже, вам просто нужен был ведущий: PRESENTER? – Shripada

+0

@Shripada, спасибо за ответ. Да, это моя ошибка. Сделано как единый объект. Но проблема не решена. –

+0

можете ли вы правильно обновить свой вопрос? На скриншоте по-прежнему отображается неправильный код – Shripada

ответ

0

В вашем объявлении класса, тип, который вы, кажется, ввести, например, Presenter , нежелательно. Я не уверен, почему компилятор разрешает это объявление частичного типа, хотя и позже корректно дает ошибку при попытке создать переменную с использованием такого частичного типа. Чтобы обойти эту проблему сейчас, чтобы избежать этого типа и непосредственно объявить переменную выступающему быть типа BasePresenter, или представляют собой тип Presenter, используя псевдоним типа:

Что-то как-

class BaseViewController <VIEW: BaseView> : UIViewController, BaseView{ 

typealias PRESENTER = BasePresenter<VIEW>! 
var presenter : PRESENTER! 

//Rest of the class body... 
} 
+1

Спасибо за ответ. Но у наследника 'BaseViewController' должен быть экземпляр наследника' BasePresenter' в переменной 'var presenter'. Как я могу это сделать? –

+0

Зачем вам это нужно? Вы можете назначить презентатору любой подтип BasePresenter. – Shripada

+1

@Shripada Итак, мы можем использовать этот var как конкретную реализацию PRESENTER и вызывать его методы напрямую, не отбрасывая «BasePresenter' в« PRESENTER »в подклассе« BaseViewController ». – shelll