С какими проблемами сталкиваются при переходе на SwiftUI
Что проверяют
Знаете ли вы реальные трудности, а не только достоинства декларативного подхода.
Как отвечать
Проблемы по группам.
1. Минимальная версия системы. Многое из того, что делает SwiftUI удобным, появилось не сразу: современная навигация только с шестнадцатой версии, часть модификаторов ещё позже. Если приложение поддерживает старые версии, приходится либо писать по две реализации, либо отказываться от возможностей.
2. Управление состоянием. Здесь больше всего ошибок. Обёртки для локального состояния, привязки, наблюдаемых объектов и владения ими выглядят похоже, но ведут себя по-разному. Классическая ошибка это создать объект-модель не в той обёртке: он будет пересоздаваться при каждом обновлении представления, теряя состояние и заново запуская загрузку.
3. Производительность и перерисовки. Тело представления вычисляется часто, и тяжёлая работа в нём бьёт по кадрам. Понять, почему произошла перерисовка, сложнее, чем в императивном подходе: явного места, где вы просите обновиться, нет.
4. Ограничения настройки. Стандартные компоненты кастомизируются не полностью, и регулярно приходится опускаться в старый набор через обёртку. То есть уйти от него целиком обычно не получается.
5. Различия между версиями системы. Один и тот же код на разных версиях ведёт себя не одинаково, и это отдельный источник дефектов, которого раньше почти не было.
6. Отладка. Сообщения компилятора о невыводимом типе в длинном выражении бывают бесполезными, а сложные представления приходится разбивать на части, чтобы вообще понять ошибку.
7. Интеграция с существующим кодом в обе стороны и совмещение двух моделей навигации.
Разумная стратегия: новые экраны на новом наборе, старое не переписывать без причины, границу проводить по экранам.
Где спотыкаются
Путают обёртки владения объектом и получают пересоздание модели.
Пишут тяжёлые вычисления прямо в теле представления.
Обещают полностью отказаться от старого набора и упираются в кастомизацию.
Не учитывают различия поведения между версиями системы.