![](https://habrastorage.org/getpro/habr/upload_files/859/9e8/112/8599e8112c837370a5d899bdf24d3df6.png)
Всем привет, с вами я, Анна Жаркова, ведущий разработчик компании Usetech.
Неделя тематических сессий в самом разгаре. Сегодня поговорим о SwiftUI, какие же новинки были уже представлены и озвучены.
В этой версии ставку сделали как на поддержку новых возможностей iOS, так и на улучшение и доработку уже существовавших. Основными направления развития SwiftUI стали:
Поддержка нового фреймворка для графиков Charts.
Навигация (своя, родная, нативная).
Сложные контролы.
Поддержка шаринга.
Графика и разметка
Предлагаю рассмотреть их детальнее.
Charts
Начнем по порядку с API для графиков.
![](https://habrastorage.org/getpro/habr/upload_files/3a4/3a1/703/3a43a170369d815d4433f98ad141da28.png)
Выглядит, что Apple потрудились на славу. С помощью этого нативного инструмента теперь можно довольно легко встроить в свое приложение график с настраиваемыми параметрами и стилями. Многое поддерживается прямо из-под коробки и создается буквально одной строкой кода. Подробнее, как работать с этим API, смотрите в тематических видео.
Navigation
Одна из самых долгожданных доработок в SwiftUI - навигация. Думаю, скажу без преувеличения, что это было бы невозможным без нас с вами, без тех, кто предлагал свои подходы и способы решения этой проблемы. Возможно, где-то в каком-то ролике затерялось одинокое "спасибо" на нас всех, но в остальном, по традиции, Apple делают вид, что додумались до всего сами. Ну да ладно.
![](https://habrastorage.org/getpro/habr/upload_files/540/2ab/1a5/5402ab1a5e47da7853966cce4208dcfa.png)
NavigationView теперь заменяется на специальный NavigationStack, внутри которого будут NavigationLink нового формата. Новые ссылки навигации будут оперировать не напрямую View, а специальными путями к ним из моделей данных.
Также появится (вернется) возможность создавать программный переход с помощью конструкции NavigationDestination.
![](https://habrastorage.org/getpro/habr/upload_files/64d/b6f/984/64db6f9841ca477bed51c519c713c1bf.png)
Сразу же возникают несколько вопросов:
как же возвращаться назад на один или несколько уровней без кнопки Back?
нужен ли нам lazy для View или нет?
Вторая часть требует детального изучения, надо посмотреть, что у ссылок под капотом.
Ответ на первый: держите ссылки на ваши пути в специальном массиве и управляйте им.
![](https://habrastorage.org/getpro/habr/upload_files/2dc/58c/80c/2dc58c80c8a00006254173bc26c90fa1.png)
Чтобы упростить код и сделать его аккуратнее, инженеры Apple рекомендуют ... создать специальную модельку для хранения данных о навигации.
![](https://habrastorage.org/getpro/habr/upload_files/84e/97e/177/84e97e1772428e17ce0a083caa8ab7d3.png)
Также сюда можно подключить локальное хранилище и асинхронные запросы данных из сохраненного стека.
![](https://habrastorage.org/getpro/habr/upload_files/8b3/2bf/61c/8b32bf61c9f6b7fec0cd546d419ea25c.png)
Пока выглядит так, что возможностей по настройке и управлением навигацией у нас стало больше, но теперь и настраивать самим нам тоже нужно больше.
Также был представлен специальный контрол NavigationSplitView для создания Master-Detail UI с поддержкой нескольких уровней:
![](https://habrastorage.org/getpro/habr/upload_files/507/638/b16/507638b1699edb8a35e7fbb6a1e8567b.png)
Улучшения и доработки коснулись также мультиоконных приложений. А для macOS и iPad появились специальные меню:
![](https://habrastorage.org/getpro/habr/upload_files/a3e/119/0f1/a3e1190f12f7e10ebcf65713acdf1ac0.png)
Advanced controls
Следующий пункт - расширенные и доработанные версии контролов. Встроенные стили, которые первоначально задумывались для упрощения работы, приносили очень много головной боли. Поэтому в новой версии исправлены некоторые из неудобств.
Появились настраиваемые многострочные TextField:
![](https://habrastorage.org/getpro/habr/upload_files/9f1/ddd/c09/9f1dddc09135e803f5801eb838392882.png)
Расширенная версия пикеров даты:
![](https://habrastorage.org/getpro/habr/upload_files/aea/c20/88f/aeac2088fae452f3e9056b5412836e23.png)
Появились специальные контролы для группировки и создания UI, похожего на системный. Также для них представлены расширенные возможности настройки встроенных стилей:
![](https://habrastorage.org/getpro/habr/upload_files/0c5/cfc/742/0c5cfc7424e2f096ec0a5dcbe1a244fd.png)
Особое внимание уделено UI и его адаптации под iPadOS. Если вы не работали именно с iPadOS, либо работали с UI под iPad довольно давно, то для вас будет неожиданным, что по UI, контролам и возможностям UI она ближе к macOS.
![](https://habrastorage.org/getpro/habr/upload_files/e47/455/2df/e474552df8a4ce1003d88b7248744174.png)
Большая работа проделана с различными формами, TableView для iPad. Много внимания уделено специальным Toolbar, их настройке и возможностям. Подробнее смотрите на тематических сессиях.
![](https://habrastorage.org/getpro/habr/upload_files/aa6/69e/669/aa669e669f46026b189e49e0284fe70a.png)
Sharing
Нативный шаринг в iOS вышел довольно мощным. Теперь не нужно много кода, возни с UIImagePickerController и сложных решений. Благодаря новому переработанному подходу и протоколу Transferable, про которые нам расскажут 8 и 9 июня, все делается просто и быстро.
На SwiftUI шаринг реализуется буквально в пару строк кода:
![](https://habrastorage.org/getpro/habr/upload_files/1c7/fdb/71a/1c7fdb71a9ff261e5451c137c9f5e4c2.png)
Также можно настроить drag-and-drop.
![](https://habrastorage.org/getpro/habr/upload_files/b15/5d2/05f/b155d205fbefb38874d9af57225ae7f2.png)
Подробнее смотрите в тематических сессиях.
Graphics and layouts
Улучшения коснулись также встроенных возможностей графического дизайна UI и новых лейаутов. В ролике "What's new in SwiftUI" коснулись последнего весьма поверхностно, пообещав рассказать в тематическом видео про сложные разметки.
Что касается графических опций, то теперь можно легко настроить тени, подсветки, градиенты, рельеф изображений и многое другое.
![](https://habrastorage.org/getpro/habr/upload_files/5e9/d85/d76/5e9d85d7615b26e8daec327e2facaf35.png)
Проще стало добавить динамику и анимацию как изображений, так и других контролов:
![](https://habrastorage.org/getpro/habr/upload_files/250/d85/04a/250d8504a5a990032636369e5cc17584.png)
Для более простого создания эффектных UI представлен специальный контрол Grid, с которым можно создавать сложные сетки с разными разметками и количество строк и столбцов:
![](https://habrastorage.org/getpro/habr/upload_files/ad7/91a/404/ad791a404c38b4ba72262136cfde0f79.png)
Также легко управлять параметрами, отвечающими за расположение элементов.
Это основные направления изменений и доработок в SwiftUI, но далеко не все. Практически все представленные новинки API, SDK и Kit работают с поддержкой декларативного фреймворка. Особое внимание уделено работе SwiftUI с iPadOS, macOS, watchOS.
SwiftUI не вытеснил UIKit, потому что базируется на нем, но и не собирается уходить в тень.
Впереди еще 4 дня видео. Делитесь впечатлениями).