Skip to content

Latest commit

 

History

History
51 lines (38 loc) · 2.06 KB

Generic classes.md

File metadata and controls

51 lines (38 loc) · 2.06 KB

Generic classes

Статус Ожидание Реальность
⚠️ Сгенерируется класс с generic-ом, пользоваться можно как в Kotlin Есть некоторые особенности использования типов

Пояснения

Опишем generic-класс в Kotlin-е:

class StateHolderWithoutAny<T>(data: T) {
    val myState = data
    fun pullState(): T = myState
}

Нельзя сделать generic над примитивными типами. Интероп ведётся через Objective-c, который не даёт это сделать.

Какие типы нельзя подставить:

  • Int / Int8 / Int16 / Int32 / Int64
  • Float / Double
  • String
  • Bool

Но можно обойтись NSNumber, NSString

Ещё одна особенность связана с nullability - аналогично generic-функциям. Тип T интерпретируется как Any?, из-за этого приходится вводить дополнительные приведения типов:

let _: Int = GenericFunctionExampleKt.convert(data: 12) as! Int
let _: String = GenericFunctionExampleKt.convert(data: "'222'") as! String
let _: NotPrimitiveType = GenericFunctionExampleKt.convert(
	data: NotPrimitiveType(item: "122")
) as! NotPrimitiveType

Чтобы Swift увидел, что тип точно является not null, нужно использовать boundary-синтаксис на Kotlin-стороне:

class StateHolderWithAny<T : Any>(data: T) {
    val myState = data
    fun pullState(): T = myState
}

Оглавление