【发布时间】:2020-05-07 21:52:26
【问题描述】:
在一个 SwiftUI 应用程序中,我有一个 ObservableObject 来跟踪用户设置:
class UserSettings: ObservableObject {
@Published var setting: String?
}
我有一个视图模型来控制我的视图的状态:
class TestViewModel: ObservableObject {
@Published var state: String = ""
}
我有我的看法。当用户设置改变时,我想让视图模型更新视图的状态:
struct HomeView: View {
@EnvironmentObject var userSettings: UserSettings
@ObservedObject var viewModel = TestViewModel()
var body: some View {
Text(viewModel.state)
.onReceive(userSettings.$setting) { setting in
self.viewModel.state = setting
}
}
}
当UserSettings.setting 在另一个视图中更改时,它会导致我视图上的onReceive 在无限循环中被调用,我不明白为什么。我看到了this question,这个循环对我来说很有意义,因为观察到的ObservableObject 的状态会随着观察而改变。
但是,在我的情况下,我没有更改观察到的对象(环境对象)状态。我正在观察环境对象并更改重绘视图的视图模型状态。
视图是否重绘了导致问题的原因?每次重绘视图时都会调用onReceive 吗?
有没有更好的方法来完成我想做的事情?
编辑:这是我的问题的一个大大简化的版本。在我的应用程序中,视图模型负责根据用户的设置执行网络请求并更新视图的状态,例如显示错误消息或加载指示器。
【问题讨论】:
标签: swiftui