Статус | Ожидание | Реальность |
---|---|---|
Доступ к свойству можно получить с помощью объекта платформенного класса | Появляется класс-обёртка с методом, принимающим объект нужного класса |
Платформенный класс - это, например, какой-то примитивный тип, или же класс, специфичный
для определённой платформы (Bundle
для Android, UILabel
для iOS, etc.).
В Kotlin-е нет разницы в использовании extension-а над обычным или платформенным классом:
// StringExt.kt
val String.myExtensionProperty: String get() = "123"
private fun example() {
val result = "123".myExtensionProperty
}
После перехода в Swift разница проявляется в появлении класса-обёртки для вызова функции, совпадающей по имени с именем свойства:
func example() {
let _ = StringExtKt.myExtensionProperty(receiver: "123")
}
Плагин moko-kswift умеет решать эту проблему с помощью фичи:
kswift {
install(
dev.icerock.moko.kswift.plugin.feature.PlatformExtensionFunctionsFeature
)
}
Но есть некоторые особенности, см. moko-kswift overview