Я довольно новичок в кодировании, вопросы и ответы в stackoverflow до сих пор очень помогали. Я не могу найти ничего, связанного с моим вопросом, и я надеюсь, что кто-то знает, что делать.
По сути; Я создал приложение с SwiftUI, в котором пользователи могут хранить конфиденциальную информацию. Я использую наблюдаемый объект с motherView, который слушает наблюдаемый объект, чтобы позволить пользователю войти в систему. Поскольку пользователь будет хранить конфиденциальную информацию, было бы идеально, если бы я мог изменить наблюдаемый объект при выходе из приложения, поэтому приложение возвращается к экрану входа в систему (приложение будет «заблокировано»).
Легенда сцены содержит функцию, которая запускается при выходе пользователя из приложения:
func sceneDidEnterBackground(_ scene: UIScene) {
// Called as the scene transitions from the foreground to the background.
// Use this method to save data, release shared resources, and store enough scene-specific state information
// to restore the scene back to its current state.
// Save changes in the application's managed object context when the application transitions to the background.
(UIApplication.shared.delegate as? AppDelegate)?.saveContext()
}
Мой наблюдаемый объект (который я хочу изменить при выходе) выглядит следующим образом:
class ViewRouter: ObservableObject {
let objectWillChange = PassthroughSubject<ViewRouter,Never>()
var currentPage: String = "page1" {
didSet {
objectWillChange.send(self)
}
}}
page1 относится в MotherView для моего LoginView. Если пользователь вводит правильный пароль, currentPage = page2
, и представление меняется. Я хочу, чтобы это go вернуться на страницу 1 при выходе из приложения. Однако я не могу объявить @ObservedObject var viewRouter: ViewRouter
в моем делегате сцены, чтобы затем добавить self.viewRouter.currentPage = "page1"
к функции sceneDidEnterBackground.
Если я объявляю наблюдаемый объект делегированной сцене, это выдает класс "ошибки SceneDelegate не имеет инициализаторов ".
У кого-нибудь есть идеи, как заставить это работать или как обойти это?
Спасибо!