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。
関連
-
[解決済み】Xcode - 'NSUnknownKeyException', reason: ... this class is not key value coding-compliant for the key X" エラーの修正方法とは?
-
libc++abi.dylib が NSException 型の捕捉できない例外で終了する理由 エラー
-
iOSコンパイルポッドでエラー CocoaPods could not find compatible versions for pod "XXXXX" が報告される。
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] Swiftで#pragmaマーク?
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] SwiftでStringを配列に分割する?
-
[解決済み] Swiftの@selector()?
-
[解決済み] Swiftのクラスにおける静的関数/変数とクラス関数/変数?
-
[解決済み] Swift ネイティブベースクラスまたは NSObject
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
libc++abi.dylib が NSException 型の捕捉できない例外で終了する理由 エラー
-
[解決済み] 奇妙な不要なXcodeログを隠す
-
[解決済み] NSの接頭辞はどういう意味ですか?
-
[解決済み] UIViewController のビューが表示されているかどうかを確認する方法
-
[解決済み] IBOutletsはARCのもとで強くなるべきか、弱くなるべきか?
-
[解決済み] テキストフィールドを移動する方法(次へボタン/完了ボタン)
-
[解決済み] iPhone 5の画面解像度に対応したアプリを開発・移行するには?
-
[解決済み] iOSとWatchKitで画像のtintColorを変更する方法
-
[解決済み] 16進カラーバリューの使用方法
-
[解決済み] ファイルはユニバーサル(3スライス)ですが、iOSの静的ライブラリのための(n)ARMv7-sスライスエラーが含まれていない、どうにかして回避するには?