2015-09-20 2 views
5

Sto imparando i generici in rapido. E non capisco cosa sta andando storto.IOS generico "non è un sottotipo di" errore di compilazione del codice

Chiunque, spieghi come posso inserire un modello generico in un altro modello.

Dichiarazione di BasePresenter classe assomiglia

class BasePresenter<VIEW : BaseView>{ 

codice con errore sotto l'immagine:

*UPD*

+0

perché ci hai dichiarato presentatore come un array? Qualche motivo? Sembra che tu abbia voluto presentarti var: PRESENTER? – Shripada

+0

@ Shripada, grazie per la risposta. Sì, è un mio errore. Fatto come un singolo oggetto. Ma non risolve il problema –

+0

puoi aggiornare la tua domanda con lo screenshot corretto? Lo screenshot mostra ancora il codice errato – Shripada

risposta

0

Nella tua dichiarazione di classe, il tipo che ti sembra di introdurre, ad esempio, presentatore , è indesiderato Non sono sicuro, perché il compilatore consenta comunque questa dichiarazione di tipo parziale e in seguito restituisca correttamente un errore quando si tenta di creare una variabile utilizzando tale tipo parziale. La soluzione per ora è di evitare questo tipo e dichiarare direttamente la variabile presentatore di essere di tipo BasePresenter, né rappresentano il tipo di PRESENTATORE utilizzando un tipo alias:

Qualcosa come-

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

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

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

Grazie per la risposta. Ma l'erede di 'BaseViewController' dovrebbe avere l'istanza di inheritor di' BasePresenter' nella variabile 'var presenter'. Come posso farlo? –

+0

Perché vorresti farlo? È possibile assegnare al presentatore, qualsiasi sottotipo di BasePresenter. – Shripada

+1

@Shripada Quindi possiamo usare quella var come implementazione specifica di 'PRESENTER' e chiamare i suoi metodi direttamente senza lanciare' BasePresenter' al 'PRESENTER' in una sottoclasse di' BaseViewController'. – shelll