【发布时间】:2015-02-17 02:21:15
【问题描述】:
我正在尝试创建一个抽象类,它可以从 CloudKit 获取记录并根据调用 fetch 方法的子类返回适当的实例。
问题是基类的类方法没有返回子类的实例。 在 Playground 中运行以下代码:
class Base {
class var value: String { return "Base" }
class func doSomething() -> Self { // In Obj-C this would return instanceType
println("doSomething() = \(self.value)")
let object = self.init()
return object
}
init() {
println("init() = \(self.dynamicType.value)")
}
}
class Sub: Base {
override class var value: String { return "Sub" }
override init() {
super.init()
println("Value = \(self.dynamicType.value)")
}
}
println("Base")
let base = Base.doSomething() // type = Base
println()
println("Sub")
let sub = Sub.doSomething() // type = Base !!
由于某种原因,在子类上调用 doSomething() 时,初始化程序会打印基类属性的值(“Base”而不是“Sub”):
基础 doSomething() = 基础
init() = 基础
子 doSomething() = 子
init() = 基础
【问题讨论】:
标签: ios swift inheritance