为了在 android 和 iOS 应用程序之间共享协议的实现,我正在尝试使用 Kotlin Multiplatform。我设置了一个基本的多平台项目,如此处所述。
它定义了共享模块中的通用代码...
fun createApplicationScreenMessage() : String {
return "Kotlin Rocks on ${platformName()}"
}
... 可以在 iOS 项目中使用CommonKt.createApplicationScreenMessage()
现在我想在 common 模块中进行 IO 操作。我为此找到了 Kotlinx-io,并且可以在公共模块中使用它。
但是如何正确设计 kotlin 代码和 swift 代码之间的 api,以便我可以将 InputStream/ByteArray/ByteReadPacket 等价物从 Swift 传递到 kotlin 模块?
例如像 ByteReadPacket 这样的 kotlinx-io 类型:
Kotlin 常用模块:
class ProtocolReader{
public fun parse(packet: ByteArray): ParsedMessage {
//parse data
}
}
斯威夫特 iOS 应用
var byteArray = [UInt8](characteristicData)
let reader = ProtocolReader()
reader.parse(byteArray)
此示例不起作用,因为 swift byteArray 无法与 KotlinByteArray 互操作。
我如何实现这一目标?我是否需要为每个平台定义 api 端点,例如在这种情况下在 Kotlin 多平台项目的 ios 模块中?还是有帮助方法从 ios 数据类型创建 kotlinx-io 数据类型?