Sto riscontrando un errore in cui non sono sicuro se si tratta di una limitazione della lingua Swift o di un bug. Ecco la premessa di base:Sottoclasse Swift Generic Class con ereditarietà NSO
class GenericClass<T> : NSObject {
var inputValue: T
init(value: T) {
self.inputValue = value
super.init()
}
}
class SubClass : GenericClass<String> {
override init(value: String) {
super.init(value: value)
}
}
var test = GenericClass(value: "test") //Succeeds
var test2 = SubClass(value: "test2") //Fails with EXC_BAD_ACCESS
sto ottenendo nessun avviso del compilatore qui, ma la sottoclasse si rifiuta di istanziare. Ho un obiettivo più complicato all'interno della sottoclasse di contesti specifici di un generico, ma questo problema di base sopra è quello a cui l'ho ridotto.
È interessante notare che se rimuovo l'ereditarietà NSO su GenericClass (e il super.init() dal metodo init generico), questa configurazione funziona senza problemi, quindi penso che debba avere qualcosa a che fare con il fatto che sto ereditando da NSObject. La mia piena implementazione DEVE ereditare da una NSOperation (fondamentalmente sto facendo classi NSOperation personalizzate con una superclasse generica), quindi ereditare da NSObject (cioè NSOperation) non è opzionale per me.
È fastidioso che non ci siano errori del compilatore e sto ricevendo qualcosa di spiacevole come un EXC_BAD_ACCESS. Mi fa pensare che forse questo dovrebbe funzionare, ma non è al momento. So che solo da poco hanno iniziato a supportare la sottoclasse di classi generiche in Swift. Sono in esecuzione l'ultima versione beta di xCode 6.
Qualsiasi comprensione apprezzata!
Grazie per la risposta Aaron. Sono d'accordo, puzza come un insetto. Ho inviato una segnalazione di bug. Vedremo cosa accadrà :) Darà al tuo protocollo un'idea nel frattempo. – erendiox
Sì, credo che questo fosse davvero un bug. Ora è stato risolto in Swift 3 e non è stato menzionato nelle modifiche alla lingua Swift 3: https://swift.org/blog/swift-3-0-release/ – ganzogo