【发布时间】:2016-09-19 00:58:31
【问题描述】:
我正在尝试允许超类中的方法返回子类的实例,以便我可以使用方法链接以及跨父类和子类的方法。
但是,当我尝试链接方法时,我收到错误消息“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 is not convertible to T”。
【问题讨论】:
标签: inheritance swift