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

问题描述

我尝试在带有 Swift 代码的 Kotlin Multiplatform XCFramework 中使用。

我有一个带有扩展的协议,用于认实现该协议

@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 相关的 StackOverflow 问题)。

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