1. ホーム
  2. swift

[解決済み] Swift 3 GCD API変更後のdispatch_once

2023-05-11 20:51:37

質問

の新しい構文は何ですか? dispatch_once の新しい構文は何ですか?旧バージョンは以下の通りです。

var token: dispatch_once_t = 0
func test() {
    dispatch_once(&token) {
    }
}

これらの は libdispatch に対する変更点です。 への変更点です。

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

からの doc :

派遣

フリーの関数dispatch_onceは、もはや Swift では使えません。Swift では、遅延初期化されたグローバルまたは静的な プロパティを使用し、dispatch_onceが提供するのと同じスレッドセーフとコールワンスの保証を得ることができます。 を得ることができます。例を挙げます。

let myGlobal: () = { … global contains initialization in a call to a closure … }()
_ = myGlobal  // using myGlobal will invoke the initialization code only the first time it is used.