如何使用 swift 中的界面与 Kotlin 多平台移动设备

How to use interface in swift with Kotlin multiplatform moblie

我正在尝试使用 swift 中的界面,但找不到 属性

commainMain

interface ApplicationToken {
    val accessToken: String
    val refreshToken: String
}

iosMain

Platform.kt

lateinit var tokenProvider: ApplicationToken

HttpClient.kt

actual fun httpClient(config: HttpClientConfig<*>.() -> Unit) = HttpClient(Darwin) {
    config(this)
    engine {
        configureRequest {
            setAllowsCellularAccess(true)
        }
    }
    install(Auth) {
        bearer {
            loadTokens {
                BearerTokens(tokenProvider.accessToken, "")
            }
        }
    }
}

现在,当我要在我的 swift 代码中访问 tokenProvider 时。它找不到。我正在添加图片请看一下。

我尝试了另一个选项来创建 class 并实现我的接口并调用 class

class getToken : ApplicationToken {
  let accessToken: String = ""
  let refreshToken: String = ""
}

_ = getToken()

但它给了我错误。我无法粘贴它,因为我在 xcode.

中不明白

在为扩展(例如 fun SomeClass.extension())和全局变量生成代码时,就像您的情况一样,Kotlin 会创建一种与文件名相关的名称空间。

在您的情况下,您的 属性 应该在 PlatformKt.tokenProvider 之下。


通常当很难找到您的 kotlin 代码在 iOS 端的可见性时,检查框架头文件很有用。它应该放在附近的某个地方(将 shared 替换为您的框架名称):

shared/build/cocoapods/framework/shared.framework/Headers/shared.h

我更喜欢在我的 Xcode 项目中通过引用添加此文件,这样我就可以一直快速访问:

然后您可以轻松地在该文件中搜索您的 variable/class/etc 姓名。