我试图创建一个Abstract类,它可以从CloudKit获取记录,并根据调用fetch方法的子类返回相应的实例。
问题是Base类的类方法不返回子类的实例。 在playgrounds中运行以下代码:
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类属性的值(" Base"而不是" Sub):
Base doSomething()= Base
init()= Base
Sub doSomething()= Sub
init()= Base
答案 0 :(得分:0)
执行以下操作时,您应该获得正确的字符串值:
NSStringFromClass(self.dynamicType)