Как создавать экран на основе существующего с использованием библиотеки компонентов
Что проверяют
Умеете ли вы собирать экран из готовых компонентов дизайн-системы, а не копировать соседний контроллер целиком с правками. Следом спрашивают, что делать, если нужного варианта компонента в библиотеке нет: дорабатывать библиотеку или решать локально.
Как отвечать
Начните с разбора макета: какие блоки уже есть в библиотеке (кнопки, ячейки, поля ввода, шапки, пустые состояния), чем новый экран отличается от существующего и где новая логика. Дальше каркас:
- переиспользование, а не копирование: общий каркас, например скролл с закреплённой кнопкой внизу, выносится в компонент или контейнер. Копия чужого
ViewControllerс правками даёт два места для каждого будущего фикса; - конфигурация через модель: компонент принимает
ViewModelилиConfigurationсо стилем, текстом и состоянием, а не выставляет наружу своиUIButton. В SwiftUI это параметры инициализатора, собственныеButtonStyleиViewModifier; - токены: цвета, шрифты и отступы берутся из дизайн-системы, а не задаются литералами. Тогда тёмную тему и Dynamic Type поддерживать проще;
- композиция: в UIKit это
UIStackViewиUICollectionViewCompositionalLayoutсUICollectionView.CellRegistration. SwiftUI-компонент встраивается в UIKit-экран черезUIHostingController, а UIKit-вью в SwiftUI черезUIViewRepresentable; - библиотека как модуль: отдельный Swift Package с превью компонентов, чтобы развивать его без сборки всего приложения;
- проверка:
#Preview, снапшот-тесты (например, swift-snapshot-testing) в светлой и тёмной теме, с крупным шрифтом, длинными текстами и VoiceOver.
Если компонента не хватает, обсудите с дизайнером: это новый вариант в библиотеке или осознанное локальное исключение.
Где спотыкаются
Копируют соседний экран целиком и переименовывают. Через полгода баг в одной копии починят, а в другой нет.
Пробрасывают наружу внутренние UILabel и UIButton компонента и настраивают их с экрана. Компонент теряет контроль над видом, и обновление дизайн-системы ломает десяток экранов.
Хардкодят цвета и шрифты при сборке нового экрана. Тёмная тема и увеличенный шрифт ломаются первыми.