在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
吗?
是否有更好的方法来完成我想做的事情?
编辑:这是我的问题的简化版本。在我的应用程序中,视图模型负责根据用户的设置执行网络请求并更新视图的状态,例如显示错误消息或加载指示符。