Swift - 在init中调用类函数

时间:2017-03-16 21:02:34

标签: swift initialization static-methods

如何从初始化程序调用类函数?我正在寻找能够起作用的东西:

class A {
  var name: String

  class func getName() -> String {
    return "first class"
  }

  init() {
    self.name = Type.getName()
  }
}

class B: A {
  var bar: String

  override class func getName() -> String {
    return "second class"
  }

  init() {
    self.bar = "bar"
    super.init()
  }
}

A().name // "first class"
B().name // "second class"
B().bar // "bar"

(我正在查看类函数,因为它们可以在初始化实例之前被覆盖和调用)

===编辑===

这个问题得到了很好的回答:https://stackoverflow.com/a/24711715/2054629

有趣的是,xcode无法编译类似的东西:

class A {
  var id: String
  class func getId() -> String {
    return ":)"
  }

  init(from id: String?) {
    let finalId = id ?? type(of: self).getId()
    self.id = finalId
  }
}

with:'self' captured by a closure before all members were initialized

虽然使用let finalId = type(of: self).getId()工作正常。

0 个答案:

没有答案