1. ホーム
  2. ios

Swiftでクラスの "initialize "クラスメソッド?

2023-10-22 03:34:50

質問

私は、Objective-Cの +(void)initialize クラスが初期化されたときに一度だけ呼び出され、その後は二度と呼び出されないという点で、Objective-C の クラス メソッドと同様の動作を探しています。

単純な class init () {} の中に class で囲むと、とてもスマートです。そして、明らかに私たちが " を使うようになったとき。 class var s" の代わりに " static var s in a struct closure"のようにすると、すべてうまくマッチします!

どのように解決するのですか?

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。