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

KMP与Swift交互:Double?转KotlinDouble?及空值传递问题

解决KMP可空Double与Swift Optional Double的参数传递问题

在Kotlin Multiplatform(KMP)项目中,Kotlin的Double?类型在iOS端会被桥接为KotlinDouble?,直接传递Swift的Double?会出现类型不匹配错误;同时你需要让coreDiameter在解析失败时保留null而非默认0,以下是具体解决方案:

1. 修复Swift Optional Double到KotlinDouble?的类型转换问题

方式一:直接用flatMap处理空值

在调用CreateRequest时,通过flatMap自动处理空值逻辑,非空时创建KotlinDouble实例,为空则直接传nil:

CreateRequest(
    length: self.rollerLength.flatMap { KotlinDouble(double: $0) },
    coreDiameter: self.rollerCoreDiameter.flatMap { KotlinDouble(double: $0) },
    ...
)

方式二:封装扩展实现复用

如果需要多处使用这种转换,可以给Swift的Optional<Double>写一个扩展,简化调用:

extension Optional where Wrapped == Double {
    var toKotlinDouble: KotlinDouble? {
        guard let value = self else { return nil }
        return KotlinDouble(double: value)
    }
}

之后调用代码会更简洁:

CreateRequest(
    length: self.rollerLength.toKotlinDouble,
    coreDiameter: self.rollerCoreDiameter.toKotlinDouble,
    ...
)

2. 让coreDiameter保留null而非默认0

移除原来代码中?? 0.0的默认值逻辑,直接保留解析后的可选结果即可。假设rollerCoreDiameter是字符串类型,解析时这样处理:

// 从字符串解析Double,失败时返回nil
let coreDiameterDouble = self.rollerCoreDiameter.flatMap { Double($0) }

CreateRequest(
    ...
    coreDiameter: coreDiameterDouble.toKotlinDouble,
    ...
)

这样当输入为空或解析失败时,coreDiameterDouble为nil,最终传递给KMP的参数也会是nil,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 11:06:01