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

KMM中Swift调用Kotlin数据类报错:init()不可用

问题原因
  1. Kotlin/Native构造函数暴露规则:你定义的GeoPoint是带默认参数的Kotlin data类,在Kotlin层面可以直接调用无参构造,但Kotlin/Native向Swift暴露API时,不会自动将带默认参数的主构造映射为Swift的无参构造器——Swift仅能识别显式定义的构造函数。
  2. 列表初始化的特殊性:你能正常实例化GeoPoint列表(比如[GeoPoint]()),是因为这是Swift自身的空数组初始化逻辑,并未创建GeoPoint实例,因此和GeoPoint的构造函数无关。
解决方法

方法一:在Kotlin中显式添加无参构造函数

在共享模块的GeoPoint类里添加次级构造,调用主构造的默认值,让Swift能识别到无参构造:

@Serializable
data class GeoPoint(
    var latitude: Double = 0.0,
    var longitude: Double = 0.0
) {
    // 显式定义无参构造,供Swift调用
    constructor() : this(0.0, 0.0)
}

重新编译共享模块后,Swift代码里就能正常使用GeoPoint()实例化对象。

方法二:Swift中直接调用带参数的构造(临时替代方案)

如果不想修改Kotlin代码,也可以在Swift里传入默认值完成初始化:

@State var myGeopoint = GeoPoint(latitude: 0.0, longitude: 0.0)

但这种方式不如添加无参构造简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:02:34