Sto tentando di consentire a un metodo in una super classe di restituire un'istanza della sottoclasse in modo da poter utilizzare il metodo concatenato con metodi sia sul genitore che sul figlio.Restituire una sottoclasse dalla sua classe base in swift
Tuttavia, viene visualizzato l'errore "BaseClass non ha un membro denominato someOtherChainableMethod" quando tento di concatenare i metodi. Qui è il mio codice:
class BaseClass {
func someChainableMethod() -> BaseClass {
return self
}
}
class ChildClass: BaseClass {
func someOtherChainableMethod() -> ChildClass {
return self
}
}
let childClass = ChildClass
childClass.someChainableMethod().someOtherChainableMethoid()
Il problema sembra essere che il 'sé ritorno' nel metodo a catena in grado genitore sta tornando di un'istanza con tipo BaseClass
piuttosto che ChildClass
.
Ho anche provato questo con i generici e fallito, questo è quello che ho provato:
class BaseClass<T> {
func someChainableMethod() -> T {
return self
}
}
class ChildClass: BaseClass<ChildClass> {
func someOtherChainableMethod() -> ChildClass {
return self
}
}
let childClass = ChildClass
childClass.someChainableMethod().someOtherChainableMethoid()
In questo caso l'errore dal metodo BaseClass
someChainableMethod
, è "BaseClass non è convertibile a T".
Questo è esattamente ciò di cui ho bisogno, perfetto grazie! :) – user3067870