文書   >   Swift   >  Cocoa Design Patterns   >   Using Key-Value Observing in Swift
記事
Using Key-Value Observing in Swift
(Swift でキー値監視を使用する)
他のオブジェクトのプロパティの変更についてオブジェクトに通知します。
概観
キー値監視は、他のオブジェクトのプロパティの変更についてオブジェクトに通知するために使用する Cocoa プログラミングパターンです。モデルとビューの間など、アプリの論理的に分離された部分の間で変更を伝達するのに役立ちます。 NSObject から継承するクラスでのみキー値監視を使用できます。
キー値監視用のプロパティに注釈を付ける
@objc 属性と dynamic 修飾子の両方を使用して、キー値監視で監視したいプロパティをマークします。以下の例では、監視できるプロパティ、myDate を使用して MyObjectToObserve クラスを定義しています。
class MyObjectToObserve: NSObject { @objc dynamic var myDate = NSDate(timeIntervalSince1970: 0) // 1970 func updateDate() { myDate = myDate.addingTimeInterval(Double(2 << 30)) // Adds about 68 years. } }
監視者の定義
監視者 (observer) クラスのインスタンスは、1 つ以上のプロパティに加えられた変更に関する情報を管理します。監視者を作成する場合、監視したいプロパティを参照するキーパスを指定して observe(_:options:changeHandler:) メソッドを呼び出して、監視を開始します。
以下の例では、\.objectToObserve.myDate キーパスは MyObjectToObserve の myDate プロパティを参照しています。
class MyObserver: NSObject { @objc var objectToObserve: MyObjectToObserve var observation: NSKeyValueObservation? init(object: MyObjectToObserve) { objectToObserve = object super.init() observation = observe( \.objectToObserve.myDate, options: [.old, .new] ) { object, change in print("myDate changed from: \(change.oldValue!), updated to: \(change.newValue!)") } } }
NSKeyValueObservedChange インスタンスの oldValue プロパティと newValue プロパティを使用して、監視しているプロパティの変更点を確認します。
プロパティの変更 方法 を知る必要がない場合は、options パラメータを省略して下さい。options パラメータを省略すると、新しいプロパティ値と古いプロパティ値の保存が不要になり、oldValue プロパティと newValue プロパティは nil になります。
監視者と監視すべきプロパティに関連付ける
監視者のイニシャライザにオブジェクトを渡すことで、その監視者と監視したいプロパティを関連付けます。
let observed = MyObjectToObserve() let observer = MyObserver(object: observed)
プロパティの変更に対応する
キー値監視 (上記の observed など) を使用するように設定されているオブジェクトは、プロパティの変更について、それの監視者に通知します。以下の例では、updateDate メソッドを呼び出して myDate プロパティを変更しています。そのメソッドの呼び出しは、監視者の変更ハンドラを自動的にトリガーします。
observed.updateDate() // Triggers the observer's change handler.
// Prints "myDate changed from: 1970-01-01 00:00:00 +0000, updated to: 2038-01-19 03:14:08 +0000"
以下も見よ
共通のパターン
- Using Delegates to Customize Object Behavior
(カスタム化されたオブジェクトの動作にデリゲートを使用する) - Managing a Shared Resource Using a Singleton
(シングルトンを使用して共有リソースの管理) - About Imported Cocoa Error Parameters
(インポートされた Cocoa のエラーパラメータについて) - Handling Cocoa Errors in Swift
(Swift での Cocoa のエラーの処理)
委任者に代わってイベントに応答します。
単一の、共有化されたクラスインスタンスを使用して、共有リソースへのアクセスを提供します。
Cocoa のエラーパラメータが Swift の throw するメソッドにどのように変換されるかを学びます。
Cocoa のエラーの型を使用するエラーを throw してキャッチします。
トップへ(Swift 標準ライブラリ)
トップへ(Swift 標準ライブラリ)
トップへ(Swift 標準ライブラリ)
トップへ(Swift 標準ライブラリ)
トップへ(Swift 標準ライブラリ)
トップへ(Swift 標準ライブラリ)