在 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)中进行延迟

Kotlin Multiplatform 项目包含 cocoapod 依赖项

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