在 Kotlin Multiplatform 中使用 Swift 协议默认实现
Posted
技术标签:
【中文标题】在 Kotlin Multiplatform 中使用 Swift 协议默认实现【英文标题】:Using Swift protocol default implementation in Kotlin Multiplatform 【发布时间】:2021-04-30 09:20:51 【问题描述】:我尝试在 Kotlin Multiplatform XCFramework 中使用 Swift 代码。
我有一个扩展了该协议的默认实现的协议
@objc protocol Greeting
var something: String get
extension Greeting
var something: String
return "Hello from Swift"
我在 Platform.kt 中编写
class GreetingImpl: NSObject(), GreetingProtocol
override fun something(): String
return (this as GreetingProtocol).something()
actual class Platform actual constructor()
val object = GreetingImpl()
val value = object.something() //Application builds but falls here
如何?
【问题讨论】:
【参考方案1】:据我所知,主要有两个问题:
-
扩展缺少
@objc
注释。虽然这是 Swift 方面的限制,但这会阻止 Kotlin 提供完整的互操作性(Kotlin/Native 不支持与 Swift 的直接互操作性,只能通过 Objective-C [docs])。
Objective-C 不支持协议默认实现(参见this 相关的 *** 问题)。
所以,我想说在 Kotlin Multiplatform 中没有使用 Swift 协议默认实现的选项。
【讨论】:
以上是关于在 Kotlin Multiplatform 中使用 Swift 协议默认实现的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin-multiplatform:如何执行 iOS 单元测试
Kotlin-Multiplatform 中的 CPointer
如何使用 Kotlin-Multiplatform 在 iOS 应用程序的后台线程中运行任务?
如何在 Kotlin Multiplatform(纯 kotlin)中进行延迟