Выбор ответа Senior MVC, MVP, MVVM, MVI, VIPER обновлено

Моделирование состояния экрана

Вопрос

Состояние экрана описано так: isLoading: Bool, error: String?, items: [Item]?. Какая проблема?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Допускаются невозможные комбинации: загрузка, ошибка и данные одновременно. Три независимых поля дают 8 комбинаций, и половина из них бессмысленна.

Варианты ответа

  1. Слишком мало полей для экрана со списком: нет пагинации и признака обновления
  2. Bool нельзя использовать в состоянии: такие поля не сравниваются при диффе
  3. Допускаются невозможные комбинации: загрузка, ошибка и данные одновременноправильный ответ
  4. Опциональные массивы запрещены в view model, вместо nil нужен пустой список

Разбор

Три независимых поля дают 8 комбинаций, и половина из них бессмысленна. Закрытая иерархия (enum с associated values, sealed class/interface) делает невозможные состояния невыразимыми: loading, content(items), error(message), empty. Если нужно показывать данные во время обновления, это отдельный явный случай (content(items, isRefreshing)). Компилятор потом проверит, что view обработала все варианты.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.