Sono di fronte a un problema relativo all'invio dei metodi dei protocolli.Invio metodo di estensione protocollo in Swift 2.0
Ho una gerarchia di classi che assomiglia a quello:
protocol E {
func test()
}
extension E {
func test() {
print("jello")
}
}
class A: E {
}
class B: A {
func test() {
print("hello")
}
}
Ma quando chiamo test
su un'istanza della classe B
staticamente costretti a essere digitato A
, "gelatina" viene stampato, non "ciao".
let b: A = B() // prints "jello" not "hello"
b.test()
mia comprensione è che test
metodo di stampa "gelatina" viene "integrato" in casi di A
(dal A
conforme alle E
protocollo). Fornisco quindi un'altra implementazione di test
all'interno di B
(che eredita il modulo A
). Ho pensato che il polimorfismo avrebbe funzionato qui e chiamando test
nell'istanza B
che è stata memorizzata all'interno dei riferimenti A
avrebbe stampato hello
. Cosa sta succedendo qui?
E 'perfettamente funzionante quando non si utilizza qualsiasi protocollo:
class A {
func test() {
print("jello")
}
}
class B: A {
override func test() {
print("hello")
}
}
let b: A = B() // prints "hello"
b.test()
Cosa c'è di diverso di adottare un protocollo che aggiunge nuovi metodi per la mia classe padre e fornendo una nuova implementazione in una sottoclasse, di aver scritto direttamente questo metodo in la classe genitore e poi sovrascriverla in una sottoclasse?
Ragazzi, avete qualche soluzione?
Non il comportamento preciso che si sta vedendo, ma strettamente correlato: http://nomothetis.svbtle.com/the-ghost-of-swift-bugs-future –