Удобное взаимодействие с Kotlin из Swift. Часть первая: обзор проблем и решений
В июле этого года наш технический директор Алексей Михайлов выступил на конференции мобильных разработчиков Mobius. Мы преобразовали это выступление в статью и опубликовали первую часть.
Если вы iOS-разработчик и работали с KMM, вы могли столкнуться с ограничениями в разработке. В статье Алексей подробно разбирает все причины этих ограничений и предлагает решения.
✅ В чем основная проблема взаимодействия Kotlin и Swift?
После компиляции мы получаем не Swift API, а Objective-C API. После чего уже сам Swift взаимодействует с фреймворками Objective-C. Из-за этого получается, что мы ограничены тем синтаксисом, который поддерживает Objective-C.
✅ Из этого вытекают следующие ограничения:
- в Swift нет sealed-классов и интерфейсов;
- Kotlin/Native не умеет объявлять Objective C extension;
- синтаксис Objective C не поддерживает generic-протоколы и -функции;
- в Swift нет вариантности у generic;
- в Swift, как и в Objective C, нет абстрактных классов;
- в Objective C нет дефолтных аргументов.
✅ Но, несмотря на эти ограничения, есть несколько вариантов, как улучшить взаимодействие. Вот что нашел Алексей:
- Sourcery — Swift-инструмент, который, на первый взгляд, никак с мультиплатформой напрямую не связан;
- компиляторные плагины Kotlin — самый частый ответ на вопросы кодогенерации в последнее время;
- Gradle-плагины — решение, которым мы пользуемся, хоть и оно не идеально.
В полной версии статьи мы подробно рассмотрели ограничения и решения проблемы.
А через некоторое время мы выложим вторую часть статьи, где расскажем о преимуществах и недостатках использования Gradle-плагинов. Это отдельная большая тема.
Делитесь этой статьей с iOS-разработчиками, которые хотят разобраться в КММ.
И подписывайтесь на наш телеграм-канал, чтобы не пропустить вторую часть статьи.