swiftui - SwiftUI 如何在单独的窗口中修改 @AppStorage 变量?
问题描述
我对 SwiftUI 和 swift 编程相当陌生,我对如何修改 @AppStorage 属性有疑问。
我正在尝试使用入门流程对应用程序进行编程,以便在第一次打开应用程序时向用户显示多个视图,从那时起,它直接进入主视图。
这是我在 ContentView 中的代码:
@AppStorage("onboardingView") var onboarding = true
var body: some View {
if onboarding {
Welcome()
}
else {
PrimaryView()
}
}
Welcome() 视图是一个 NavigationView,它会通过导航链接带您浏览一系列视图。在链的末端,最后一个视图有一个按钮,其操作是:UserDefaults.standard.set(false, forKey: "onboardingView")。
我原以为这会起作用,因为我读到@AppStorage 写入 UserDefaults.standard,但每次都会出现入职视图。
我怎样才能使@AppStorage onboarding 变量在单独的视图中设置为 false?
解决方案
在这里:使用 Binding 你可以做到。
struct ContentView: View {
@AppStorage("onboardingView") var onboarding = true
var body: some View {
if onboarding {
WelcomeView(onboarding: $onboarding)
}
else {
PrimaryView(onboarding: $onboarding)
}
}
}
struct WelcomeView: View {
@Binding var onboarding: Bool
var body: some View {
VStack(spacing: 20.0) {
Text("WelcomeView").padding().background(Color.red).cornerRadius(10.0)
Button("update onboarding to true") { onboarding = true }
Button("update onboarding to false") { onboarding = false }
}
}
}
struct PrimaryView: View {
@Binding var onboarding: Bool
var body: some View {
VStack(spacing: 20.0) {
Text("PrimaryView").padding().background(Color.yellow).cornerRadius(10.0)
Button("update onboarding to true") { onboarding = true }
Button("update onboarding to false") { onboarding = false }
}
}
}
推荐阅读
- java - log4j2.xml 查找 Spring 设置的系统属性
- flutter - 管理图像/视频路径以供以后使用
- javascript - 无法在 vue.js 中将数据从 false 更改为 true
- c - 在 c 编程中为第二个函数添加原型
- python - DBT 和 Liquibase(创建表)
- c# - 将图像移动到剪贴板不起作用c#
- c# - C# 将物理文件转换为 iformfile
- python-3.x - ValueError 尽管尝试和除外
- python - Python中是否有一种简单的方法可以在不知道扩展名的情况下按名称获取文件?
- c++ - 用于循环编译的 constexpr