2014-12-06 4 views
5

Il mio codice è davvero semplice.Impossibile chiamare il metodo type sulla classe conforme al protocollo

mio protocollo:

protocol BaseEntity 
{ 
    class func getInstance(sourceObject: [NSObject : AnyObject], context: AnyObject!) -> BaseEntity 
    init() 
} 

Poi in un'altra classe che ho questo metodo:

private func convertJSONDictionaryIntoModel(jsonDictionary : [NSObject : AnyObject], mapClass: BaseEntity.Type) -> BaseEntity 
{ 
    let object = mapClass.getInstance(jsonDictionary, context: nil) 

    return object 
} 

ho ottenuto un errore di compilazione sulla prima riga che legge come "Accesso ai membri del protocollo di valore di tipo BaseEntity .Type è non implementato "

Per quanto posso dire, questo è possibile in Swift.

risposta

0

Ho appena incontrato anche questo! Ciò significa che il linguaggio di programmazione Swift non supporta i metodi di classe all'interno dei protocolli ... ancora. La soluzione per questo sembra dipendere dalla situazione specifica e non c'è "dovresti farlo invece". Se qualcuno ha una soluzione migliore, per favore condividi!

Questo è anche il caso di variabili di classe, tuttavia c'è un hacky workaround for that.

+0

Purtroppo, non sono riuscito a trovare una soluzione a questo. L'unico modo in cui riesco ad accettarlo è usando i generici, ma anche i generici hanno i loro limiti. Questo tipo di problemi mi fa davvero pensare che la lingua sia incompleta. Il loro intento era quello di rendere le cose più facili e più esplicite ... beh, supponiamo che se non supportano questo tipo di cose e uno deve fare affidamento su alcuni workaround come quello che hai esposto, che è piuttosto fregato. – mdonati