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

向数组追加0值时异常:打印结果为nil而非预期的0.0

问题排查与解决方案

我来帮你搞定这个问题!你的计算逻辑本身是没问题的——tpmsvalue通过Double("0")转换后是Optional(0.0),强制解包后计算出的pressureKpa确实是0.0。但打印得到nil的核心原因是:dongleData.tpmsList本身是nil,可选链调用?.append直接跳过了添加操作,所以tpmsList始终保持nil状态。

具体分析

你代码里的dongleData.tpmsList?.append(pressureKpa)用到了可选链操作符?.:如果tpmsList为nil,整个append调用会直接失效,不会执行任何添加操作,自然也不会把0.0存入数组。

修复方案

你需要先确保tpmsList被初始化,再执行添加操作,这里有几种常用的靠谱方式:

方式一:先初始化空数组(最安全,推荐)

let tpmsvalue = Double("0") 
// 用guard处理转换失败的情况,避免强制解包的崩溃风险
guard let tpms = tpmsvalue else {
    print("TPMS值转换失败")
    return
}
let pressureKpa = tpms * 1.572 * 2 

// 先判断tpmsList是否为nil,是则初始化空数组
if dongleData.tpmsList == nil {
    dongleData.tpmsList = []
}
dongleData.tpmsList?.append(pressureKpa)

方式二:用nil合并运算符简化初始化

let tpmsvalue = Double("0") 
// 用nil合并运算符处理转换失败的情况,默认值设为0.0
let pressureKpa = (tpmsvalue ?? 0.0) * 1.572 * 2 

// 取出现有数组(如果nil就用空数组),添加元素后重新赋值
var updatedList = dongleData.tpmsList ?? []
updatedList.append(pressureKpa)
dongleData.tpmsList = updatedList

方式三:强制解包(仅当你100%确定tpmsList不会为nil时使用)

let tpmsvalue = Double("0") 
let pressureKpa = tpmsvalue! * 1.572 * 2 

// 强制解包,若tpmsList为nil会直接触发崩溃,谨慎使用
dongleData.tpmsList!.append(pressureKpa)

额外优化提示

你代码里的Double(tpmsvalue!)是冗余的——tpmsvalue本身就是Double?类型,解包后已经是Double,直接用tpmsvalue!计算即可,不需要再重复转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:12:32