So che il titolo di questa interrogazione è confusa ma il comportamento bizzarro è spiegato nel seguente esempio:In Swift, perché metodo della sottoclasse non può ignorare l'uno, fornito da protocollo di estensione in superclasse
protocol Protocol {
func method() -> String
}
extension Protocol {
func method() -> String {
return "From Base"
}
}
class SuperClass: Protocol {
}
class SubClass: SuperClass {
func method() -> String {
return "From Class2"
}
}
let c1: Protocol = SuperClass()
c1.method() // "From Base"
let c2: Protocol = SubClass()
c2.method() // "From Base"
Come mai c1.method()
e c2.method()
restituiscono lo stesso? Come mai il method()
in SubClass non funziona?
È interessante notare che, senza dichiarare il tipo di c2, questo sta andando a lavorare:
let c2 = SubClass()
c2.method() // "From Class2"
bella domanda. Ne ho uno simile a http: // StackOverflow.it/questions/33702738/method-customization-in-sub-class-not-called;). Che è probabilmente un tuo duplicato. È come se il dispatch dinamico funzioni solo se la SuperClass implementa la funzione. – bm842