我试图让父类(super class)中的方法返回子类的实例,这样我就可以在父类和子类中使用方法链。
但是,当我尝试链接方法时出现错误“BaseClass 没有名为 someOtherChainableMethod 的成员”。这是我的代码:
class BaseClass {
func someChainableMethod() -> BaseClass {
return self
}
}
class ChildClass: BaseClass {
func someOtherChainableMethod() -> ChildClass {
return self
}
}
let childClass = ChildClass
childClass.someChainableMethod().someOtherChainableMethoid()
问题似乎是父级链式方法中的“return self”正在返回类型为 BaseClass
而不是 ChildClass
的实例。
我也用泛型尝试过这个但失败了,这是我尝试过的:
class BaseClass<T> {
func someChainableMethod() -> T {
return self
}
}
class ChildClass: BaseClass<ChildClass> {
func someOtherChainableMethod() -> ChildClass {
return self
}
}
let childClass = ChildClass
childClass.someChainableMethod().someOtherChainableMethoid()
在这种情况下,BaseClass
someChainableMethod
方法的错误是“BaseClass 不可转换为 T”。
最佳答案
如果您将方法的返回类型更改为 Self
,您的代码将有效:
class BaseClass {
func someChainableMethod() -> Self {
return self
}
}
class ChildClass: BaseClass {
func someOtherChainableMethod() -> Self {
return self
}
}
let childClass = ChildClass()
let foo = childClass.someChainableMethod().someOtherChainableMethod()
关于inheritance - swift 从其基类返回子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26296938/