[解決済み] Swiftで関連オブジェクトを設定する方法はありますか?
2023-05-31 20:18:06
質問
Objective-Cから来た場合、関数
objc_setAssociatedObject
を呼び出すことができます。これは、実行時にその参照も削除されるまでオブジェクトが破壊されたくない場合に便利です。Swiftはこれに類似した何かを持っていますか?
どのように解決するのですか?
以下は、シンプルですが、完全な例です。 jckarter の回答 .
既存のクラスに新しいプロパティを追加する方法を示しています。これは,拡張ブロックの中で計算されたプロパティを定義することによって行われます.計算されたプロパティは関連付けられたオブジェクトとして保存されます。
import ObjectiveC
// Declare a global var to produce a unique address as the assoc object handle
private var AssociatedObjectHandle: UInt8 = 0
extension MyClass {
var stringProperty:String {
get {
return objc_getAssociatedObject(self, &AssociatedObjectHandle) as! String
}
set {
objc_setAssociatedObject(self, &AssociatedObjectHandle, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
}
}
EDITです。
初期化されていないプロパティの値の取得をサポートする必要がある場合、また、エラーの発生を避けるために
unexpectedly found nil while unwrapping an Optional value
というエラーを避けるために、ゲッターをこのように変更することができます。
get {
return objc_getAssociatedObject(self, &AssociatedObjectHandle) as? String ?? ""
}
関連
-
[解決済み] dispatch_after - GCD in Swift?
-
[解決済み] カスタムオブジェクトを含むNSMutableArrayをソートするにはどうすればよいですか?
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] Swiftで#pragmaマーク?
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み】(Swiftで)オブジェクトの型を調べるには?)
-
[解決済み] SwiftフレームワークでCommonCryptoをインポートする
-
[解決済み] 既存のUIKitアプリケーションにSwiftUIビューを含める
-
[解決済み] NSDateを使用して曜日を取得する
-
[解決済み] 「fatal error: array cannot be bridged from Objective-C"-なぜ試すんだ、Swift?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Objective-Cです。カテゴリ内のプロパティ/インスタンス変数
-
[解決済み] Swift - 複数条件でオブジェクトの配列を並べ替える
-
[解決済み] Swift - サブクラスでオーバーライドする必要があるクラスメソッド
-
[解決済み] Swiftの変数に"?"(クエスチョンマーク)と"!"(エクスクラメーションマーク)の装飾を施す。
-
[解決済み] Swiftのif letと論理AND演算子&&の使い分け
-
[解決済み] Swift で型に表示されるテキスト表現を変更するにはどうしたらいいですか?
-
[解決済み] XcodeでFirebase Analyticsをオンにする
-
[解決済み] Swiftで乱数を生成する
-
[解決済み] Swiftの定数。構造体か列挙型か
-
[解決済み] SceneDelegateとAppDelegateの違いについて