我对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入职变量设置为false?
这里:通过绑定,您可以做到这一点。
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 }
}
}
}
尝试放置相同的
@AppStorage("onboardingView") var onboarding
进入链的端视图并直接修改
var body: some View {
...
onboarding = false
...
}
注意:请确保在主队列上修改此设置