重置主要内容视图-Swift UI



我的应用程序有一个用户使用的主屏幕,然后完成后转到另一个视图,当前实现为.fullscreencover。我希望用户能够按下一个按钮,应用程序几乎会重置,将一切恢复到第一次启动应用程序时的状态,并重置所有变量和类。

我尝试过的一种方法是在最终视图的顶部再次打开视图,但这不会重置它。以下是我尝试过但不起作用的代码:

Button("New Game"){
newGame.toggle()
}
.fullScreenCover(isPresented: $newGame){
ContentView()
}

除此之外,我还尝试了导航视图,但这会导致我的应用程序功能出现更多问题。

有没有一行代码允许你这样做?

可能的方法是使用全局应用程序状态

class AppState: ObservableObject {
static let shared = AppState()
@Published var gameID = UUID()
}

并且根内容视图依赖于该gameID

@main
struct SomeApp: App {
@StateObject var appState = AppState.shared    // << here
var body: some Scene {
WindowGroup {
ContentView().id(appState.gameID)    // << here 
}
}
}

现在,为了从任何地方将所有内容重置为初始状态,我们只需设置新的gameID:

Button("New Game"){
AppState.shared.gameID = UUID()
}

最新更新