Swift - Subclass的初始化程序中的dynamicType返回BaseClass

时间:2015-02-17 02:21:15

标签: ios swift inheritance

我试图创建一个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

1 个答案:

答案 0 :(得分:0)

执行以下操作时,您应该获得正确的字符串值:

NSStringFromClass(self.dynamicType)