Опишите состояния enum и переключайте содержимое через switch. Анимация зависит от изменения состояния, а оформление можно передать отдельными ViewBuilder-замыканиями.
Создание UI‑экрана с переключаемыми состояниями
Опишите состояния 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.