keyPathsForValuesAffectingPreview
est implémentée de la même manière que toute autre méthode keyPathsForValuesAffecting<Foo>
spécifiant des dépendances KVO, à l'exception qu'elle est déclarée sur une instance au lieu d'un type. Pour plus d'informations sur la déclaration des dépendances KVO, reportez-vous à cette page dans la documentation:
Fondamentalement, en un mot, vous voulez renvoyer un ensemble de chemins d'accès aux propriétés qui, lorsqu'elles sont modifiées, doivent modifier l'aperçu. . Dans Swift, il y a quelques mises en garde supplémentaires ne sont pas présents en Objective-C:
Toutes les propriétés en question doit être marqué avec l'attribut @objc
.
Toutes les propriétés en question doit être KVO conforme, ce qui signifie essentiellement que:
- Pour une propriété stockée, ajoutez le mot clé
dynamic
sur la déclaration de propriété.
- Pour une propriété calculée
foo
, ajoutez une propriété keyPathsForValuesAffectingFoo
statique répertoriant ses dépendances comme Set
de String
s.
À titre d'exemple, supposons que j'ai une propriété foo
qui est une chaîne. J'ai aussi une propriété bar
dont la valeur est dérivée de la valeur de foo
. Si les modifications sont, nous souhaitons que l'aperçu change. Je voudrais écrire mon code comme ceci:
@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)] }
Si la propriété foo
est modifié dans le scénario ci-dessus, les notifications KVO pour le chemin de clé foo
seront envoyés, depuis foo
est dynamique. Ensuite, les notifications KVO pour le chemin de clé bar
seront envoyées, car bar
dépend du chemin de clé foo
. Cela, à son tour, entraînera la mise à jour de votre aperçu, car NSPrintPanel surveillera le chemin de clé bar
que nous avons renvoyé à partir de keyPathsForValuesAffectingPreview
.