Чтобы поделиться реализацией протокола между android и iOS-приложением, я экспериментирую с Kotlin Multiplatform.Я настроил базовый мультиплатформенный проект, как описано здесь .
Он определяет общий код в общем модуле ...
fun createApplicationScreenMessage() : String {
return "Kotlin Rocks on ${platformName()}"
}
... который можно использоватьв проекте iOS CommonKt.createApplicationScreenMessage()
Теперь я хотел бы выполнить операции ввода-вывода в общем модуле.Я нашел Kotlinx-io для этого и могу использовать его внутри общего модуля.
Но как правильно спроектировать API между кодом Kotlin и кодом Swift, чтобы я мог передать InputStream / ByteArray/ ByteReadPacket эквивалентен из Swift в модуль kotlin?
например, что-то вроде этого с типами kotlinx-io, такими как ByteReadPacket:
Общий модуль Kotlin:
class ProtocolReader{
public fun parse(packet: ByteArray): ParsedMessage {
//parse data
}
}
Приложение Swift для iOS
var byteArray = [UInt8](characteristicData)
let reader = ProtocolReader()
reader.parse(byteArray)
Этот пример не работает, поскольку swift byteArray не совместим с KotlinByteArray.
Как мне этого добиться?Нужно ли мне определять конечные точки API для каждой платформы, например, в этом случае в модуле ios мультиплатформенного проекта Kotlin?или есть вспомогательные методы для создания типов данных kotlinx-io из типов данных ios?