微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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
...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。