You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否让Swift struct实现Kotlin interface?技术问题咨询

Swift结构体实现Kotlin接口的最新解决方案

问题背景

想要让Swift的结构体实现Kotlin定义的接口,最初尝试的代码及配置如下:

Swift实现代码:

struct MyStruct : KotlinInterface {
    func someMethod() {}
}

Kotlin接口定义:

interface KotlinInterface {
    fun someMethod()
}

手动编写Objective-C桥接配置时,出现错误:Non-class type 'MyStruct' cannot conform to class protocol 'KotlinInterface',原因是手动生成的协议继承了NSObject,属于类协议,Swift结构体无法遵循。

2024年可用解决方案

随着Kotlin/Native的迭代更新,现在已经原生支持Swift值类型(struct/enum)实现Kotlin接口,无需手动编写Objective-C桥接代码,步骤如下:

  1. 升级Kotlin版本:确保使用Kotlin 1.8及以上的稳定版(该特性在1.8版本正式落地)
  2. Kotlin端保持原有接口定义:不需要添加任何特殊注解或配置,正常定义接口即可
  3. Swift端直接实现接口:现在可以直接让结构体遵循Kotlin生成的接口,示例:
struct MyStruct: KotlinInterface {
    func someMethod() {
        // 自定义实现逻辑
    }
}

关键说明

新版Kotlin/Native在生成Swift桥接文件时,会自动创建不带类约束的协议,不再强制继承NSObject,因此Swift的结构体、枚举等值类型可以正常遵循该协议,解决了之前的类协议兼容性问题。

如果仍遇到异常,可尝试:

  • 检查Kotlin项目的构建配置,确保iOS目标已正确配置并启用Swift互操作
  • 清理项目缓存(包括Kotlin构建缓存和XDerivedData),重新构建Kotlin端代码以生成正确的桥接文件

内容的提问来源于stack exchange,提问作者Nike Kov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 00:45:02