Kotlin多平台接口挂起函数在Swift协议中表示为异步等待和完成处理程序

vsnjm48y  于 2023-02-28  发布在  Swift
关注(0)|答案(1)|浏览(123)

正如标题所示,我已经在共享KMM模块中定义了接口,需要在iOS端实现。该接口包含很少的suspend函数。但是,当在Swift中检查该接口表示时,每个suspend函数在Swift协议中同时具有async/awaitcompletionHandler表示。换句话说,我被要求实现这两个函数,尽管事实上我只需要一个(在我的情况下,我宁愿只实现completionHandler)。
是否有办法向KMM表明我更喜欢一个选项而不是两个都有?

ktca8awb

ktca8awb1#

答案很简单,不可能。这就是为什么:Kotlin没有直接的Kotlin<->Swift互操作性,Kotlin将代码翻译成Objective-C并只生成一个completionHandler表示。然后Swift(从5.5开始)从Objective-C代码生成两个方法-一个使用completionHandler,另一个使用async/await。你可以在official documentation中阅读更多内容。
我还建议你考虑一下你的KMM API。Kotlin接口和Swift协议是不同的,只有部分的互操作性,有时候在你的共享模块中提供抽象类而不是接口会更好。
作为解决方案,我建议您查看Moko-KSwift-此gradle插件有助于生成Swift友好的API,您可以编写自己的生成器并创建特殊的Swift助手。

相关问题