我试图允许超类中的方法返回子类的实例,以便我可以在父类和子类之间使用方法链接。
但是,当我尝试链接这些方法时,出现错误“BaseClass 没有名为 someOtherChainableMethod 的成员”。这是我的代码:
class BaseClass {
func someChainableMethod() -> BaseClass {
return self
}
}
class ChildClass: BaseClass {
func someOtherChainableMethod() -> ChildClass {
return self
}
}
let childClass = ChildClass
childClass.someChainableMethod().someOtherChainableMethoid()
问题似乎是父级可链接方法中的“返回自身”正在返回类型为的实例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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)