17 ноября мы провели в нашем московском Робохранилище митап для iOS-разработчиков. Говорили про обобщённое программирование в Swift, метаморфозу архитектуры и нативную навигацию, ели пиццу — а теперь рассказываем подробнее, как всё прошло.
Generics. Самая непонятная часть в Swift
Технический директор red_mad_robot spb Шурик Бабаев начал своё выступление с краткого экскурса в обобщённое программирование, или метапрограммирование. По его словам, оно начинается в тот момент, когда нам не хватает обычного.
К примеру, есть алгоритм, и мы хотим, чтобы он всегда работал одинаково — код, который обрабатывает данные, один и тот же, но типы разные: со строкой или с числом — неважно. Появляется естественное желание не дублировать этот код. И в этот момент возникает метапрограммирование — чтобы написать один код и впоследствии использовать его для разных целей.
Первый, сравнительно простой вариант, как это реализовать, — боксинг. Второй — страшное слово «мономорфизация».
После вступительной части Шурик перешёл к основной, где рассказал о метапрограммировании в Swift.
Меня в принципе интересует, что происходит в Swift: как язык устроен, зачем он так устроен и почему. Поэтому я с удовольствием наблюдаю за его эволюцией и в какой-то момент стал следить за развитием дженериков в Swift. Для меня это самая непонятная часть в Swift, я до сих пор не всегда понимаю, что нужно написать, чтобы оно сработало. Там долгие полтора-два года что-то переписывалось — мне было очень интересно, поэтому я стал разбираться, как же они устроены.
Шурик Бабаев, технический директор red_mad_robot spb
Полное выступление можно посмотреть ниже, а также скачать презентацию.
Метаморфоза архитектуры. От SOA к микрофичам
iOS-разработчики red_mad_robot Стас Анацкий и Влад Марков начали свой доклад с небольшого вступления о том, что не будут касаться presentation-архитектур, а расскажут о SOA и микрофичевой архитектуре, которые применили на одном из своих проектов. А метаморфоза заключается в том, что SOA применяется на уровне core-компонентов и по мере движения к presentation-слою используется MSA.
SOA, сервисно-ориентированная архитектура, очевидно была придумана, чтобы решить какую-то проблему. А есть ли проблема? Все мы знаем про SOLID, стараемся придерживаться принципов. Но приходит время строить сложный слой приложений — и возникают вопросы. Это должна быть какая-то сущность, которая в целом отвечает за работу сети. Но в реальности количество запросов от сети обычно очень большое, и такая сущность начнёт увеличиваться в размерах.
Стас Анацкий, iOS-разработчик red_mad_robot
Прежде чем углубляться в архитектуру, ребята предложили определить, на каком уровне абстракции они находятся. Как минимум, можно выделить два слоя: presentation- и бизнес-слой. На первом происходит контроль отображения данных и обработки действий пользователя, второй отвечает за работу с сетью и персистенси. И доклад ребят был сконцентрирован именно на слое бизнес-логики.
Полное выступление Влада и Стаса можно посмотреть ниже, а также скачать презентацию.
Нативная навигация в SwiftUI до iOS16
Выступление Юли Никитиной, главного разработчика «Иннотеха», было посвящено «хлебным крошкам» (breadcrumbs) и отталкивалось от одной задачи — реализовать в приложении веб-навигацию с возможностью быстрого перехода к любому вью из стека.
Казалось бы, разбивай её на подзадачи:
получить доступ к стеку навигации,
получить возможность хранить и произвольно менять состав стека,
сбрасывать стек при возврате на главный экран, —
и вперёд! В UIKit, например, всё это достаточно очевидно: за доступ к стеку отвечает .viewControllers, за возможность его сбрасывать — popToRootViewController, а за возможность произвольно менять его состав — setViewControllers и popToViewController.
Но не всё так просто.
Наше приложение было полностью написано на SwiftUI, и, конечно, нам не хотелось как-то добавлять UIKit, возвращаться на прежний код. В UIKit есть прекрасные методы управления стеком, но, к сожалению, в SwiftUI до iOS16 ничего подходящего для этой задачи нет. Там есть проблема в том, что код «прибит гвоздями» к UI, и NavigationLink никак нельзя извлечь из presentation-слоя — помимо архитектурных проблем, это ещё влечёт за собой отсутствие какого-то доступа к стеку.
Юля Никитина, главный разработчик «Иннотех»
О том, как было решена эта проблема, подробнее можно посмотреть в видео выступления Юли, а также скачать презентацию.
Делимся железной экспертизой от практик в нашем телеграм-канале red_mad_dev. А полезные видео складываем на одноимённом YouTube-канале. Присоединяйся!