Пример появился в основной ветке проекта Kotlin Native. уикит .
Это простое iOS-приложение, которое отображает строку, введенную в поле ввода, и да, 100% кода написано на Kotlin. Это выглядит так:
Стоит ли задуматься о портировании вашего приложения сейчас?
Да, но только если: 0).Что вам действительно нужно, так это общая база кода мобильного приложения.
1).
Приложение имеет мало общего с платформой.
2).
У вас есть время написать код на Kotlin, который в будущем следует переписать на Objective-C или Swift.
Причины пока не портировать
ViewController, AppDelegate и даже основная функция в примере написаны на Kotlin. Те файлы, которые написаны на Objective-C, нужны только для того, чтобы XCode не выдавал ошибку и не попадал в финальную сборку (способов исправить ситуацию я не нашел).Те.
Полноценного взаимодействия, подобного Java, видимо, пока нет. Это вовсе не означает, что к релизу ситуация не изменится (проект сейчас находится на стадии альфа-превью, и об этом примере даже есть пост в блог не было).
Но спектр доступных сейчас возможностей весьма ограничен.
Взаимодействие
Идиоматический подход к написанию мультиплатформенного приложения на Kotlin — писать общую часть отдельно, а часть — отдельно для каждой платформы.Причём на каждой платформе, по задумке, все написанные для неё библиотеки должны быть легко доступны.
В случае с Java это работает хорошо.
В случае с iOS дела обстоят сейчас следующим образом:
Это очень хорошо.@ExportObjCClass class KotlinViewController : UIViewController { constructor(aDecoder: NSCoder) : super(aDecoder) override fun initWithCoder(aDecoder: NSCoder) = initBy(KotlinViewController(aDecoder)) @ObjCOutlet lateinit var label: UILabel @ObjCOutlet lateinit var textField: UITextField @ObjCOutlet lateinit var button: UIButton @ObjCAction fun buttonPressed() { label.text = "Konan says: 'Hello, ${textField.text}!'" } }
К каждому внешнему классу, к каждому графическому элементу из раскадровки добавляем аннотацию @ExportObjCClass — @ObjCOutlet и @ObjCAction для каждого действия.
Классы Objective-C доступны по их первоначальным именам.
Если вам нужно вызвать Kotlin из Objective-C/Swift
В этом статья описывает, как это можно сделать.
После определенного количества слоев с ручным преобразованием типов 2 раза, но можно вызывать Swift из Kotlin и Kotlin из Swift.
Накладные расходы
По идее вес приложения должен увеличиться примерно на 100 Кб( отсюда ).Вместо GC будет использоваться ARC, поэтому большой разницы в производительности со Swift не должно быть.
Обратная совместимость
Судя по отчеты членов команды разработчиков языка, обратная совместимость является одним из их главных приоритетов.Насколько это хорошо – судить вам.
Лично я считаю, что он намного лучше, чем Swift, и в целом язык хорош, и большинство головоломки выглядеть надуманным.
Но есть 1 вещь, которая, на мой взгляд, может оказаться «бомбой замедленного действия», которую невозможно исправить обратной совместимостью.
в соответствии
Для реализации сопрограммы , которые делают синхронный и асинхронный код практически идентичными, в язык было введено лишь одно новое ключевое слово suspend, что разработчики заслуженно гордимся .Но для того, чтобы методы расширения ( для каждого , карта.
) работало так же быстро, как и обычно для (и для вывода общих типов во время выполнения программы), целых 3 ( встроенный, кросс-лайн, ноинлайн ).
Они явно не делают код более читабельным.
JIT теряет некоторые возможности оптимизации ( подкаст об этом ), а опыт C показывает, что разработчики не знают, как правильно использовать такие возможности языка.
В общем, я не понимаю, почему то же самое нельзя было сделать в виде аннотации.
На мой взгляд, inline — плохое решение достойной проблемы.
Заключение
- Скоро на Kotlin можно будет писать для всех трёх основных платформ (Android, iOS, Web).
- Скорее всего будет хорошая совместимость с Objective-C и Swift. Возможно, лучше, чем то, что находится между этими языками.
Учитывая опыт JetBrains в разработке компиляторов и IDE, это вполне правдоподобно.
- Kotlin имеет легкий язык выполнения для Android и Интернета.
Под iOS, судя по всему, тоже не составит большого труда.
- Уже сейчас можно что-то написать.
-
Об Одной Тёте
19 Oct, 24 -
Подкаст «Я Сказал На Каннада» (№ 19)
19 Oct, 24 -
Wii: Впечатления От Игры «Игра Симпсонов»
19 Oct, 24 -
Предложение: Пузомерка По «Избранному»
19 Oct, 24