SwiftUI:如何在不同的视图中显示UserDefault数据

问题描述

当前,我有一个bool“心脏”按钮,供用户点击并将更改后的值保存到UserDefault数据库

struct RootView: View {
    @Observedobject var userSettings = UserSettings()

    var body: some View {
        Button(action: { self.userSettings.isVisited.toggle() }) {
            if self.userSettings.isVisited {
                Image(systemName: "heart.fill").font(.title)
            } else {
                Image(systemName: "heart").font(.title)
            }
        }.foregroundColor(.red)
    }
}

现在,我想在另一个视图中显示“心脏”更改后的值。我将如何实现? 预先谢谢你!

解决方法

如果您的UserSettings直接在UserDefaults中存储/观察者设置,那么在另一个视图中,您可以仅使用UserSettings的另一个实例

例如:

struct AnotherView: View {
    @ObservedObject var userSettings = UserSettings()

    var body: some View {
        VStack {
            if self.userSettings.isVisited {
                Image(systemName: "heart.fill").font(.title)
            } else {
                Image(systemName: "heart").font(.title)
            }
        }
    }
}

否则,您应该将UserSettings的单个实例存储在顶级位置(场景,应用程序等),并将该单个实例作为环境对象注入到两个(所有)视图中

struct RootView: View {
    @EnvironmentObject var userSettings: UserSettings

...

struct AnotherView: View {
    @EnvironmentObject var userSettings: UserSettings
...