一尘不染

Swift中类的“初始化”类方法?

swift

我正在寻找类似于Objective-C的+(void)initializeclass方法的行为,因为该方法在类初始化时被调用一次,此后不再被调用。

一个简单class init () {}class闭合将非常时尚!而且很显然,当我们在结构闭包中使用“ class vars”而不是“
static vars”时,这一切都将非常匹配!


阅读 235

收藏
2020-07-07

共1个答案

一尘不染

如果您有一个Objective-C类,最简单的方法就是重写+initialize。但是,请确保您的类的
类也被覆盖+initialize,否则您的类的
+initialize可能会被多次调用!如果需要,可以使用dispatch_once()(如下所述)防止出现多个呼叫。

class MyView : UIView {
  override class func initialize () {
    // Do stuff
  }
}

如果您有Swift类,那么最好的方法就是dispatch_once()init()语句内。

private var once = dispatch_once_t()

class MyObject {
  init () {
    dispatch_once(&once) {
      // Do stuff
    }
  }
}

此解决方案与+initialize(第一次给Objective-C类发送消息时称为)不同,因此不是对问题的真正答案。但是,IMO效果很好。

2020-07-07