繁体   English   中英

SwiftUI 中的状态变量未选取 UserDefaults .set

[英]UserDefaults .set not being picked up by state variable in SwiftUI

我试图检测用户是否已加入,例如启动应用程序。 当我直接访问UserDefaults.standard.bool ,我可以看到更改,但是当我尝试通过@State访问它时,它保留了原始的false值。

作为一种解决方法,我直接将值更改为true ,但我感觉这不是这样做的方法。

在更改UserDefaults对象时如何让@State变量获取更改而无需关闭并重新启动应用程序? 我希望用户加入,单击一个按钮,然后立即切换到主应用程序视图。

@State var userOnboarded: Bool = UserDefaults.standard.bool(forKey: "userOnboarded")
    
    var body: some Scene {
        WindowGroup {
            if userOnboarded {
                Text("PLACEHOLDER: Main App View")
            } else {
                Button(action: {
                    UserDefaults.standard.set(true, forKey: "userOnboarded")
                    userOnboarded = true
                    print(UserDefaults.standard.bool(forKey: "userOnboarded"))
                }) {
                    VStack {
                        Text("Click circle to onboard.")
                        Circle()
                            .foregroundColor(Color.red)
                    }
                }
            }
        }

在 SwiftUI 中有一个专门的包装器来观察 UserDefaults。 正如您之前在评论中提到的,它被称为@AppStorage ,它的使用方式是这样的。

@AppStorage("userOnboarded") var userOnboarded: Bool = false

它的功能类似于 UserDefault,但会在值更改时刷新视图并设置数据。

Button(action: {
    userOnboarded = true
    print(UserDefaults.standard.bool(forKey: "userOnboarded"))
}) //....

注意在按钮中,我们将 userOnboarded 设置为 true,这将更新和刷新您的视图以及更新用户默认值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM