2016-02-12 32 views
6

che sto cercando di fare questo, ma sto ottenendo alcuni problemigenerici Swift questione rinviata

Questo è CustomProtocol

protocol CustomProtocol { 

} 

SubCustomProtocol

protocol SubCustomProtocol: CustomProtocol { 

} 

SubCustomProtocolImplementation

class SubCustomProtocolImplementation: SubCustomProtocol { 

} 

Questo è CustomClass

class CustomClass<P: CustomProtocol> { 

    var customProtocol: P? 

    func doSomething() { 

    } 

} 

SubCustomClass

class SubCustomClass<P: SubCustomProtocol>: CustomSubClass { 

} 

E il mio BaseViewController

class BaseViewController<P: CustomProtocol, T: CustomClass<P>>: UIViewController { 

    var foo: T! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     foo?.doSomething() 
    } 
} 

mio ViewController

class ViewController<P: SubCustomProtocolImplementation, T: SubCustomClass<P>>: BaseViewController<P,T> { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
} 

Nella riga in cui io chiamo foo? .doSomething() è dice che 'T' non è un sottotipo di 'CustomClass < 'P'>' e non so cosa sto facendo male

E nella dichiarazione ViewController si dice che "BaseViewController richiede che T ereditano da CustomClass < 'P'> "

Spero che tu possa aiutarmi!

+0

Non ho ricevuto questo errore. Almeno nel parco giochi. Sei sicuro di fornire il contesto completo? – iyuna

+0

@Iyuna mi mancava qualcosa mi dispiace! Ho modificato la domanda –

+1

Sembra, un parametro di tipo non può essere limitato da una classe generica. Può essere vincolato da una classe o un protocollo. – CouchDeveloper

risposta

2

Se si desidera specificare il tipo foo var come CustomClass<P>, si dovrebbe invece fare come segue.

class ViewController<P: CustomProtocol>: UIViewController { 

    var foo: CustomClass<P>? 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     foo?.doSomething() 
    } 
} 
+0

grazie, lo so, non lo stavo spiegando molto bene, ho modificato di nuovo la mia domanda –