Skip to content

Latest commit

 

History

History
47 lines (34 loc) · 2.14 KB

Extension properties over platform class.md

File metadata and controls

47 lines (34 loc) · 2.14 KB

Extension properties over platform class

Статус Ожидание Реальность
⚠️ Доступ к свойству можно получить с помощью объекта платформенного класса Появляется класс-обёртка с методом, принимающим объект нужного класса

Пояснения

Платформенный класс - это, например, какой-то примитивный тип, или же класс, специфичный для определённой платформы (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


Оглавление