keyPathsForValuesAffectingPreview
は、KVO依存関係を指定する他の方法と同じ方法で実装されますが、例外ではなくインスタンス上で宣言されます。 https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/KeyValueObserving/Articles/KVODependentKeys.html
基本的に一言で言えば、変更されたときにプレビューを変更する必要のある一連のキーパスをプロパティに戻したいとします。 。
問題の性質のすべてが@objc
属性でマークされている必要がありますスウィフトでは、Objective-Cの中に存在していないいくつかの余分な注意点があります。
- 保存されたプロパティについては、プロパティ宣言に
dynamic
キーワードを追加:
問題の性質のすべて
はKVO準拠、本質的ということでなければなりません。
- 計算されたプロパティー
foo
の場合は、keyPathsForValuesAffectingFoo
という静的プロパティを追加し、その依存関係をSet
としてString
に追加します。例として
、私は文字列であるプロパティfoo
があるとします。私はまた、値がfoo
から派生したプロパティbar
を持っています。 bar
が変更された場合は、プレビューを変更する必要があります。 foo
プロパティがfoo
は動的であるため、foo
キーパスのKVO通知は、送信されます、上記のシナリオに変更された場合は
@objc dynamic var foo: String = "Foo"
@objc static let keyPathsForValuesAffectingBar: Set<String> = [#keyPath(foo)]
@objc var bar: String { return self.foo }
func keyPathsForValuesAffectingPreview() -> Set<String> { return [#keyPath(bar)] }
:私はこのように私のコードを記述します。次に、bar
キーパスのKVO通知が送信されます。bar
はfoo
キーパスに依存しているためです。 NSPrintPanelはkeyPathsForValuesAffectingPreview
から返されたbar
キーパスを見ているため、プレビューが更新されます。