Создание UI‑экрана с переключаемыми состояниями

Опишите состояния enum и переключайте содержимое через switch. Анимация зависит от изменения состояния, а оформление можно передать отдельными ViewBuilder-замыканиями.

Короткий ответ

Что ответить на собеседовании

Опишите состояния enum и переключайте содержимое через switch. Анимация зависит от изменения состояния, а оформление можно передать отдельными ViewBuilder-замыканиями.

Подробный разбор

Ответ с пояснениями

Условие

Сформировать базовую разметку для интерфейса, способного отображать три варианта состояния: загрузка, ошибка и успешный результат. Осуществить плавный анимированный переход между этими вариантами и обеспечить возможность их дальнейшей кастомизации.

Ответ

Опишите состояния enum и переключайте содержимое через switch. Анимация зависит от изменения состояния, а оформление можно передать отдельными ViewBuilder-замыканиями.

Базовый каркас для целочисленного результата:

enum ScreenState: Equatable {
    case loading, failure(String), success(Int)
}
struct StateScreen: View {
    let state: ScreenState
    var body: some View {
        ZStack {
            switch state {
            case .loading: ProgressView().transition(.opacity)
            case .failure(let message):
                Text(message).foregroundStyle(.red).transition(.opacity)
            case .success(let value):
                Text("Результат: \(value)").transition(.opacity)
            }
        }
        .animation(.easeInOut(duration: 0.2), value: state)
    }
}

Родитель владеет состоянием и передаёт его экрану. Для дизайн-системы замените фиксированные ProgressView/Text на внедряемые builders, сохранив один контракт состояний. Отмена и сетевые запросы должны оставаться в модели, а не запускаться заново из body.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее