SwiftUI视图中的onReceive导致无限循环

时间:2020-05-07 21:52:26

标签: swiftui

在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吗?

是否有更好的方法来完成我想做的事情?

编辑:这是我的问题的简化版本。在我的应用程序中,视图模型负责根据用户的设置执行网络请求并更新视图的状态,例如显示错误消息或加载指示符。

0 个答案:

没有答案