Swift 进阶:Observation 框架中可观察(@Observable)对象的高级操作(上)
概述
在 WWDC 24 中苹果推出了全新的 Observation 框架,借助于它我们可以更加细粒度的监听可观察(@Observable)对象 。同时,SwiftUI 自身也与时偕行开始全面支持 @Observable 对象的“嵌入”。
然而在这里,我们却另辟蹊径来介绍 @Observable 对象另外一些“鲜为人知”的故事。
在本篇博文中,您将学到如下内容:
- 概述
- 1. “独立自主”的 @Observable 对象
- 2. 如何用 withObservationTracking 监听属性的 didSet 事件?
- 3. 重构之后
- 总结
相信学完本课后,小伙伴们一定会对“自立自强”的可观察对象的使用更加游刃有余、运用自如。
那还等什么呢?Let’s go!!!😉
1. “独立自主”的 @Observable 对象
Observation 框架是一个专注于观察我们活力四射、变化莫测 App 中所有可观察对象的。它在 iOS 17(macOS 14)中被引入,正好对应着 SwiftUI 5.0。
大家都知道,借助 SwiftUI,Observation 可以发挥出难以置信的巨大威力。不过除了和 SwiftUI “形影不离”以外,我们还可以让它雏鹰展翅独当一面。这是通过利用 withObservationTracking 方法做到的:
简单来说,@Observable 宏构建的可观察对象可以与 withObservationTracking 方法“琴瑟和鸣”:withObservationTracking 方法允许我们在闭包中跟踪可观察对象上所访问的属性。如果我们尝试访问的任何属性发生了变化,则该闭包将会被调用。
下面是具体的代码示例:
@Observable
class Counter {
var count = 0
}
class CounterObserver {
let counter: Counter
init(counter: Counter) {
self.counter = counter
}
func observe(