【发布时间】:2022-08-03 05:54:43
【问题描述】:
在 SwiftUI 中,我想将环境对象传递给视图模型,以便我可以更改/更新它。 EnvironmentObject 是一个简单的 AppState,它由一个属性计数器组成。
class AppState: ObservableObject {
@Published var counter: Int = 0
}
视图模型 \"CounterViewModel\" 更新环境对象,如下所示:
class CounterViewModel: ObservableObject {
var appState: AppState
init(appState: AppState) {
self.appState = appState
}
var counter: Int {
appState.counter
}
func increment() {
appState.counter += 1
}
}
ContentView 显示值:
struct ContentView: View {
@ObservedObject var counterVM: CounterViewModel
init(counterVM: CounterViewModel) {
self.counterVM = counterVM
}
var body: some View {
VStack {
Text(\"\\(counterVM.counter)\")
Button(\"Increment\") {
counterVM.increment()
}
}
}
}
我也在注入状态,如下所示:
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
NavigationStack {
let appState = AppState()
ContentView(counterVM: CounterViewModel(appState: appState))
.environmentObject(appState)
}
}
}
问题是当我单击增量按钮时,counterVM.counter 永远不会返回更新的值。我错过了什么?
-
所有可观察对象都必须使用其中一个对象包装器进行包装,您不能将一个放在另一个内部并让它们触发更改。水槽是一种选择,但并不理想。
-
您有建议的解决方案吗?
-
之前的评论中提到了唯一的解决方案。
-
我无法理解评论。谢谢你的帮助!