在 Kotlin Multiplatform 中使用 Swift 协议默认实现

Using Swift protocol default implementation in Kotlin Multiplatform

我尝试在 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
}

如何在 Kotlin Multiplatform 中使用 Swift 协议默认实现?

据我所知,主要有两个问题:

  1. 扩展缺少 @objc 注释。虽然这是 Swift 方面的限制,但这会阻止 Kotlin 提供完整的互操作性(Kotlin/Native 不支持与 Swift 的直接互操作性,仅通过 Objective-C [docs]) .
  2. Objective-C 不支持协议默认实现(参见 this 相关的 Whosebug 问题)。

所以,我想说在 Kotlin Multiplatform 中没有使用 Swift 协议默认实现的选项。