Я хотел бы начать с выделения иерархии моих представлений. У меня просто есть FindUserView
и WelcomeView
.
FindUserView
используется для извлечения пользователей с сервера, если введенная электронная почта существует. Если это так, то он автоматически перенаправляет меня к следующему WelcomeView
, где я могу ввести пароль и логин.
Я создал репо здесь и видео SwiftUI - Pop назад не освобождает вид
Мой FindUserView
: ---------------------------- и WelcomeView
:
-----------------
By нажимая кнопку NEXT на FindUserView
, я получаю пользователя из базы данных:
func fetchUser(with email: String) {
userService.getUser(with: email) { (result) in
switch result {
case .success(_):
self.showActivityIndicator = false
self.showingAlert = false
self.showWelcomeView = true
break
case .failure:
self.showingAlert = true
break
}
}
}
Я использую NavigationView
и программно показываю WelcomeView
, изменяя состояние showWelcomeView
выше:
NavigationLink(destination: WelcomeView(), isActive: $showWelcomeView) { EmptyView() }
Теперь я нахожусь в режиме приветствия WelcomeView
.
Но когда я нажимаю эту кнопку и возвращаюсь назад, мой WelcomeView
все еще существует.
Поскольку я использую @EnvironmentObject
с наблюдаемым состоянием свойства, я вижу, как оно отражается на представлении, которое уже отклонено. Это правильное поведение? Или мне нужно как-то иметь дело c WelcomeView
? Приводит ли это к утечкам памяти?
Я немного волнуюсь, как в UIKit
, когда вы возвращаетесь в стек навигации, контроллер представления освобождается UINavigationController
, автоматически удаляя контроллер представления из массива. Как правильно вернуться в SwiftUI?