Моделирование состояния экрана
Вопрос
Состояние экрана описано так: isLoading: Bool, error: String?, items: [Item]?. Какая проблема?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- Слишком мало полей для экрана со списком: нет пагинации и признака обновления
- Bool нельзя использовать в состоянии: такие поля не сравниваются при диффе
- Допускаются невозможные комбинации: загрузка, ошибка и данные одновременноправильный ответ
- Опциональные массивы запрещены в view model, вместо nil нужен пустой список
Разбор
Три независимых поля дают 8 комбинаций, и половина из них бессмысленна. Закрытая иерархия (enum с associated values, sealed class/interface) делает невозможные состояния невыразимыми: loading, content(items), error(message), empty. Если нужно показывать данные во время обновления, это отдельный явный случай (content(items, isRefreshing)). Компилятор потом проверит, что view обработала все варианты.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Как моделировать состояние и события экрана
Следующий вопрос
Зачем Jetpack ViewModel переживает поворот
Термины по теме
Ещё по теме «MVC, MVP, MVVM, MVI, VIPER»
- Выбор паттерна для небольшого приложения
- MVC, MVP, MVVM, MVI, VIPER коротко
- TCA, BLoC, Redux: общий принцип
- Что такое UDF
- Почему MVC в iOS называют Massive View Controller
- Кто за что отвечает в паттернах
- Однонаправленный поток данных в MVI
- Чем MVP отличается от MVVM