WWDC 2022. Что нового в SwiftUI
Всем привет, с вами я, Анна Жаркова, ведущий разработчик компании Usetech.
Неделя тематических сессий в самом разгаре. Сегодня поговорим о SwiftUI, какие же новинки были уже представлены и озвучены.
В этой версии ставку сделали как на поддержку новых возможностей iOS, так и на улучшение и доработку уже существовавших. Основными направления развития SwiftUI стали:
- Поддержка нового фреймворка для графиков Charts.
- Навигация (своя, родная, нативная).
- Сложные контролы.
- Поддержка шаринга.
- Графика и разметка
Предлагаю рассмотреть их детальнее.
Charts
Начнем по порядку с API для графиков.
Выглядит, что Apple потрудились на славу. С помощью этого нативного инструмента теперь можно довольно легко встроить в свое приложение график с настраиваемыми параметрами и стилями. Многое поддерживается прямо из-под коробки и создается буквально одной строкой кода. Подробнее, как работать с этим API, смотрите в тематических видео.
Navigation
Одна из самых долгожданных доработок в SwiftUI – навигация. Думаю, скажу без преувеличения, что это было бы невозможным без нас с вами, без тех, кто предлагал свои подходы и способы решения этой проблемы. Возможно, где-то в каком-то ролике затерялось одинокое “спасибо” на нас всех, но в остальном, по традиции, Apple делают вид, что додумались до всего сами. Ну да ладно.
NavigationView теперь заменяется на специальный NavigationStack, внутри которого будут NavigationLink нового формата. Новые ссылки навигации будут оперировать не напрямую View, а специальными путями к ним из моделей данных.
Также появится (вернется) возможность создавать программный переход с помощью конструкции NavigationDestination.
Сразу же возникают несколько вопросов:
- как же возвращаться назад на один или несколько уровней без кнопки Back?
- нужен ли нам lazy для View или нет?
Вторая часть требует детального изучения, надо посмотреть, что у ссылок под капотом.
Ответ на первый: держите ссылки на ваши пути в специальном массиве и управляйте им.
Чтобы упростить код и сделать его аккуратнее, инженеры Apple рекомендуют … создать специальную модельку для хранения данных о навигации.
Также сюда можно подключить локальное хранилище и асинхронные запросы данных из сохраненного стека.
Пока выглядит так, что возможностей по настройке и управлением навигацией у нас стало больше, но теперь и настраивать самим нам тоже нужно больше.
Также был представлен специальный контрол NavigationSplitView для создания Master-Detail UI с поддержкой нескольких уровней:
Улучшения и доработки коснулись также мультиоконных приложений. А для macOS и iPad появились специальные меню:
Advanced controls
Следующий пункт – расширенные и доработанные версии контролов. Встроенные стили, которые первоначально задумывались для упрощения работы, приносили очень много головной боли. Поэтому в новой версии исправлены некоторые из неудобств.
Появились настраиваемые многострочные TextField:
Расширенная версия пикеров даты:
Появились специальные контролы для группировки и создания UI, похожего на системный. Также для них представлены расширенные возможности настройки встроенных стилей:
Особое внимание уделено UI и его адаптации под iPadOS. Если вы не работали именно с iPadOS, либо работали с UI под iPad довольно давно, то для вас будет неожиданным, что по UI, контролам и возможностям UI она ближе к macOS.
Большая работа проделана с различными формами, TableView для iPad. Много внимания уделено специальным Toolbar, их настройке и возможностям. Подробнее смотрите на тематических сессиях.
Sharing
Нативный шаринг в iOS вышел довольно мощным. Теперь не нужно много кода, возни с UIImagePickerController и сложных решений. Благодаря новому переработанному подходу и протоколу Transferable, про которые нам расскажут 8 и 9 июня, все делается просто и быстро.
На SwiftUI шаринг реализуется буквально в пару строк кода:
Также можно настроить drag-and-drop.
Подробнее смотрите в тематических сессиях.
Graphics and layouts
Улучшения коснулись также встроенных возможностей графического дизайна UI и новых лейаутов. В ролике “What’s new in SwiftUI” коснулись последнего весьма поверхностно, пообещав рассказать в тематическом видео про сложные разметки.
Что касается графических опций, то теперь можно легко настроить тени, подсветки, градиенты, рельеф изображений и многое другое.
Проще стало добавить динамику и анимацию как изображений, так и других контролов:
Для более простого создания эффектных UI представлен специальный контрол Grid, с которым можно создавать сложные сетки с разными разметками и количество строк и столбцов:
Также легко управлять параметрами, отвечающими за расположение элементов.
Это основные направления изменений и доработок в SwiftUI, но далеко не все. Практически все представленные новинки API, SDK и Kit работают с поддержкой декларативного фреймворка. Особое внимание уделено работе SwiftUI с iPadOS, macOS, watchOS.
SwiftUI не вытеснил UIKit, потому что базируется на нем, но и не собирается уходить в тень.
Впереди еще 4 дня видео. Делитесь впечатлениями.