在 SwiftUI 中,当我们更新 View 的状态时,框架会自动根据该状态的变化来重新渲染 View。但有时我们需要手动触发状态更新,可以使用 objectWillChange 发送通知来实现。
objectWillChange 是一个仅用于 ObservableObject 类型的 protocol,在该协议中只有一个类型为 ObservableObjectPublisher 的对象。该对象中包含了一个 send() 函数,用于发送状态更新通知。我们可以通过对该对象添加属性包装器来轻松访问它。
以下是一个实例代码,展示了如何在 ViewModel 中使用 objectWillChange 发送状态更新通知:
import SwiftUI
import Combine
class ViewModel: ObservableObject {
var name: String = "" {
didSet {
// 当 name 值改变时手动触发状态更新
objectWillChange.send()
}
}
}
在上面的例子中,当 name 值被更新后,我们手动触发了 objectWillChange 发送状态更新通知,从而使 View 监听该对象的 View 进行重新渲染。通过这种方式,我们可以明确地控制状态更新的时机,从而实现更强大的功能。