向数组追加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
相关产品推荐
相关产品推荐

