首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Kotlin/本机与Swift的互操作性:使用两个具有相同签名的方法生成的接口

Kotlin/本机与Swift的互操作性:使用两个具有相同签名的方法生成的接口
EN

Stack Overflow用户
提问于 2021-09-20 12:37:04
回答 1查看 283关注 0票数 1

我有一个Kotlin多平台项目,它使用iOS库在CoreBluetooth设备上执行蓝牙操作。我有一些问题,在获得外围断开的回调。仔细观察,我发现生成的CBCentralManagerDelegateProtocol接口(我覆盖的)有两个具有相同签名的方法。

@kotlin.commonizer.ObjCCallable public open expect fun centralManager(central: platform.CoreBluetooth.CBCentralManager, didFailToConnectPeripheral: platform.CoreBluetooth.CBPeripheral, error: platform.Foundation.NSError?): kotlin.Unit { /* compiled code */ }

@kotlin.commonizer.ObjCCallable public open expect fun centralManager(central: platform.CoreBluetooth.CBCentralManager, didDisconnectPeripheral: platform.CoreBluetooth.CBPeripheral, error: platform.Foundation.NSError?): kotlin.Unit { /* compiled code */ }

因此,我只能覆盖这些方法中的一个。我的问题是我是不是漏掉了什么?就像一种覆盖这两种方法的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-20 12:59:49

在kotlin中,您不能声明两个具有相同签名的函数,只有参数名称不同。但是在ObjC你可以。

要支持这种互操作,可以使用@Suppress("CONFLICTING_OVERLOADS"),如文档中描述的这里

要用冲突的Kotlin签名覆盖不同的方法,可以向类添加一个@ class (“CONFLICTING_OVERLOADS”)注释。

代码语言:javascript
运行
复制
@Suppress("CONFLICTING_OVERLOADS", "PARAMETER_NAME_CHANGED_ON_OVERRIDE")
override fun centralManager(
    central: CBCentralManager,
    didFailToConnectPeripheral: CBPeripheral,
    error: NSError?
) {
}

@Suppress("CONFLICTING_OVERLOADS", "PARAMETER_NAME_CHANGED_ON_OVERRIDE")
override fun centralManager(
    central: CBCentralManager,
    didDisconnectPeripheral: CBPeripheral,
    error: NSError?
) {
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69254560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档