我正在使用 onChange
修饰符观察视图上的一个属性。然而,我还希望同一段代码在初始值上运行,因为有时数据是在初始化器中注入或后来异步加载的。
例如,我有一个视图会注入一个模型。有时这个模型已经包含了一些数据(比如预览),或者是从网络异步获取的。
class MyModel: ObservableObject {
@Published var counter = 0
}
struct ContentView: View {
@ObservedObject var model: MyModel
var body: some View {
VStack {
Text("Counter: \(model.counter)")
Button("Increment") { model.counter += 1 }
}
.onChange(of: model.counter, perform: someLogic)
.onAppear { someLogic(counter: model.counter) }
}
private func someLogic(counter: Int) {
print("onAppear: \(counter)")
}
}
在onAppear
和onChange
的情况下,我想运行someLogic(counter:)
。有没有更好的方法来实现这个功能或将它们合并?
.onReceive(model.$counter, perform: someLogic)
。 - New Dev