Что такое SwiftUI и в чем его преимущество над UIKit
Что проверяют
Понимаете ли вы разницу подходов и называете ли недостатки.
Как отвечать
Декларативный набор инструментов для интерфейса. Вы описываете, как выглядит экран при данном состоянии, а система сама обновляет его при изменении. Старый набор императивный: интерфейс создаётся один раз, а дальше изменяется вручную.
Практическая разница именно в этом: в императивном подходе состояние хранится и в модели, и в дереве представлений, и расхождение этих копий даёт большую часть ошибок. В декларативном копия одна.
Преимущества:
- заметно меньше кода и отсутствие ручной синхронизации;
- живой предпросмотр прямо в редакторе, включая разные размеры экранов, темы и языки одновременно. Экономит огромное количество запусков приложения;
- анимации и переходы описываются одной строкой;
- бесплатно из коробки: тёмная тема, динамический размер шрифта, базовая доступность, поддержка направления письма справа налево;
- общий код между платформами экосистемы.
Недостатки называть обязательно:
- минимальная версия системы. Многое появилось не сразу, и поддержка старых версий заставляет либо писать двумя способами, либо отказываться от возможностей;
- ограниченная настройка стандартных компонентов: регулярно приходится опускаться в старый набор через обёртку;
- перерисовки: понять, почему представление обновилось, сложнее, чем в императивном подходе, а тяжёлое тело представления бьёт по кадрам;
- различия между версиями системы: один и тот же код ведёт себя не одинаково;
- сообщения компилятора в длинных выражениях бывают бесполезными.
Честный вывод: полный отказ от старого набора сегодня редко возможен. Обычная стратегия это новые экраны на новом наборе, интеграция в обе стороны через обёртки, старое не переписывать без причины.
Где спотыкаются
Называют преимуществом только краткость кода.
Не знают про ограничения по версиям системы.
Обещают полностью отказаться от старого набора.
Не могут объяснить, что даёт декларативный подход по сути.