[英]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.