Сброс основного представления содержимого — Swift UI

#ios #swift #swiftui

#iOS #swift #swiftui

Вопрос:

В моем приложении есть один главный экран, который использует пользователь, затем, как только они закончат, перейдите к другому представлению, которое в настоящее время реализовано как .fullscreencover . Я хочу, чтобы пользователь мог нажать кнопку, и приложение в значительной степени сбрасывается, возвращая все к тому, что есть, когда приложение запускается в первый раз, и сбрасывает все переменные и классы.

Единственный метод, который я пробовал, — это снова открыть представление поверх окончательного представления, однако это не приводит к его сбросу. Вот код, который я пробовал, но не работает:

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

Наряду с этим я пробовал просмотр навигации, однако это вызывает больше проблем с функциональностью моего приложения.

Есть ли строка кода, которая позволяет вам это сделать?

Ответ №1:

Возможный подход заключается в использовании глобального состояния приложения

 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()
}
 

Комментарии:

1. Этот класс, похоже, блокирует presentationMode.wrappedValue.dismiss() строку, когда я пытаюсь вернуться к представлению? Должен ли я что-то там менять?