Как управляется жизненный цикл View в SwiftUI?

«Как управляется жизненный цикл View в SwiftUI?» — вопрос из категории SwiftUI, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В SwiftUI жизненный цикл View декларативен и привязан к данным, а не к методам, как в UIKit. View — это функция от состояния (state). Основные фазы и модификаторы для реакции на них:

Ключевые модификаторы жизненного цикла:

  • .onAppear(perform:) Вызывается, когда View становится видимой в интерфейсе. Используется для начальной настройки, запуска анимаций или загрузки данных.

    .onAppear {
        viewModel.loadData()
        startAnimation()
    }
  • .onDisappear(perform:) Вызывается, когда View исчезает с экрана. Используется для очистки ресурсов, отмены подписок или остановки таймеров.

    .onDisappear {
        viewModel.cancelRequests()
        stopTimer()
    }
  • .task(priority:_:) Современная замена .onAppear для асинхронных операций. Автоматически запускает асинхронную задачу при появлении View и отменяет её при исчезновении.

    .task {
        // Асинхронная загрузка данных
        await viewModel.fetchData()
    }

Пример полного цикла:

struct ProfileView: View {
    @StateObject var viewModel = ProfileViewModel()

    var body: some View {
        VStack {
            Text("Hello, (viewModel.username)")
        }
        .onAppear { print("ProfileView appeared") }
        .onDisappear { print("ProfileView disappeared") }
        .task {
            // Загрузка данных при появлении, отмена при исчезновении
            await viewModel.loadUserData()
        }
    }
}

Принцип: SwiftUI автоматически создает, обновляет и уничтожает View при изменении связанных с ними данных (@State, @ObservedObject, @StateObject). Разработчик лишь описывает, что должно происходить в ключевые моменты (появление/исчезновение) с помощью модификаторов.