Sto provando a trasmettere e/o generare una variabile in base al tipo generico specificato. Capisco che non ci sia cancellazione di tipo in swift, ma non sembra che i generici conservino un tipo diverso dalle condizioni specificate del generico, ad es. conforme a una classe base. Sembra che tutto quello che posso lanciare o inizializzare sia la classe base. La cosa ancora più strana è quando mi trovo nel debugger i appare generici hanno un RawPointer alla classe corretta e anche le variabili appaiono come se fossero del tipo giusto:Generici Swift che non conservano il tipo
EDIT:
Come di Xcode 6.1 questo è ancora un problema (codice di cortesia semplificata di Gregory Higley):
class BaseClass {
func printme() -> Void {
println("I am BaseClass")
}
}
class DerivedClass : BaseClass {
override func printme() -> Void {
println("I am DerivedClass")
}
}
class Util<T: BaseClass> {
func doSomething() {
var instance = T()
instance.printme()
}
}
var util = Util<DerivedClass>()
util.doSomething()
stampa ancora fuori "io sono BaseClass"
piacerebbe anche notare che init richiesta {} nelle clas di base s non funziona più.
È necessario modificare la risposta corretta a rintaro. –
@rfrittelli - In realtà la risposta corretta è quella di JeremyP qui sotto. Ho confermato che funziona e che la risposta di rintaro non funziona più nell'ultimo XCode. – Lee
Qual era il tuo output originale (sarebbe stato d'aiuto)? A partire da 6.1, entrambi i test producono lo stesso risultato, che è previsto. E puoi anche indicare la tua domanda? –