我遇到了一个有趣的行为(或者这可能是预期的行为,但我错了)。当我用于@AppStorage
将用户引导至入职或不引导时,第一个入职视图会显示两次。很难解释,这是一个gif:
单击“完成入门”后,我必须导航到 MainView,但第一个视图会以某种方式再次显示在中间。
仍然很难解释,所以这里是最基本的 SwiftUI 代码,您可以自己尝试一下:
import SwiftUI
@main
struct OnboardingApp: App {
@AppStorage("onboardingCompleted") var onboardingCompleted = false
var body: some Scene {
WindowGroup {
if !onboardingCompleted {
FirstView()
} else {
MainView()
}
}
}
}
struct FirstView: View {
var body: some View {
NavigationStack {
VStack {
Text("Welcome")
NavigationLink("Second") {
SecondView()
}
}
.onAppear {
print("First View")
}
}
}
}
struct SecondView: View {
@AppStorage("onboardingCompleted") var onboardingCompleted = false
var body: some View {
VStack {
Text("Onboarding complete")
Button("Finish the onboarding") {
onboardingCompleted = true
}
}
.onAppear {
print("Second View")
}
}
}
struct MainView: View {
@AppStorage("onboardingCompleted") var onboardingCompleted = true
var body: some View {
NavigationStack {
VStack {
Text("Hello, Main View!")
Button("Uncomplete onboarding") {
onboardingCompleted = false
}
}
.onAppear {
print("Main View")
}
}
}
}
为什么var改变后FirstView又显示出来了@AppStorage
?