在 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 协议默认实现?
据我所知,主要有两个问题:
- 扩展缺少
@objc
注释。虽然这是 Swift 方面的限制,但这会阻止 Kotlin 提供完整的互操作性(Kotlin/Native 不支持与 Swift 的直接互操作性,仅通过 Objective-C [docs]) .
- Objective-C 不支持协议默认实现(参见 this 相关的 Whosebug 问题)。
所以,我想说在 Kotlin Multiplatform 中没有使用 Swift 协议默认实现的选项。
我尝试在 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 协议默认实现?
据我所知,主要有两个问题:
- 扩展缺少
@objc
注释。虽然这是 Swift 方面的限制,但这会阻止 Kotlin 提供完整的互操作性(Kotlin/Native 不支持与 Swift 的直接互操作性,仅通过 Objective-C [docs]) . - Objective-C 不支持协议默认实现(参见 this 相关的 Whosebug 问题)。
所以,我想说在 Kotlin Multiplatform 中没有使用 Swift 协议默认实现的选项。