Observation|使用 withObservationTracking 监听跨对象依赖变化

了解如何使用 withObservationTracking 实现跨 ViewModel 的响应式属性依赖监听。

Observation|使用 withObservationTracking 监听跨对象依赖变化

使用 Observable 标记的类,可以让 SwiftUI 的视图自动响应数据变化并刷新界面。但如果数据变化发生在视图之外,我们该如何观察这些变化呢?

一种常见的场景是跨 ViewModel 的属性依赖:在一个 ViewModel 中,可能需要根据另一个 ViewModel 的属性变化来更新自身的数据——例如调用 fetch() 方法重新获取内容。那么,如何才能在源数据变化时,确保依赖方能感知并作出响应?

我们在以下文章中,探讨了如何在 Observable 类中使用 didSet 属性观察器来监听数据变化:

Observation|使用 didSet/willSet 属性观察器
了解如何使用 Swift 中的属性观察器。

虽然 didSet 对监听自身属性变化非常有用,但它无法处理跨 ViewModel 的依赖关系。这时,withObservationTracking 就派上用场了 —— 它专为监听其他 Observable 对象的属性变化而设计,是实现跨对象响应式依赖的关键工具。

withObservationTracking

withObservationTracking 允许我们显式地追踪某个代码块中访问的 Observable
属性,并在这些属性变化时执行回调。