Ich versuche, einer Methode in einer Superklasse zu erlauben, eine Instanz der Unterklasse zurückzugeben, damit ich Methodenverkettung mit Methoden sowohl in der Elternklasse als auch in der Kindklasse verwenden kann.
Ich bekomme jedoch den Fehler "BaseClass hat kein Element mit dem Namen someOtherChainableMethod", wenn ich versuche, die Methoden zu verketteln. Hier ist mein Code:
class BaseClass {
func someChainableMethod() -> BaseClass {
return self
}
}
class ChildClass: BaseClass {
func someOtherChainableMethod() -> ChildClass {
return self
}
}
let childClass = ChildClass
childClass.someChainableMethod().someOtherChainableMethoid()
Das Problem scheint zu sein, dass das 'return self' in der übergeordneten verkettbaren Methode eine Instanz mit dem Typ BaseClass
zurückgibt, anstatt ChildClass
.
Ich habe es auch mit Generics versucht und bin gescheitert, das ist was ich versucht habe:
class BaseClass {
func someChainableMethod() -> T {
return self
}
}
class ChildClass: BaseClass {
func someOtherChainableMethod() -> ChildClass {
return self
}
}
let childClass = ChildClass
childClass.someChainableMethod().someOtherChainableMethoid()
In diesem Fall ist der Fehler von der BaseClass
someChainableMethod
Methode "BaseClass ist nicht in T konvertierbar".