You need to enable JavaScript to run this app. Swift使用Measurement做单位转换时无法返回Double类型报错如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

Swift使用Measurement做单位转换时无法返回Double类型报错如何解决?

报错原因

核心报错原因是Measurement<UnitLength>类型和Double类型不匹配:所有单位转换、同类型Measurement相加后的结果,仍然是带单位信息的Measurement结构体,而非纯数值,需要访问它的value属性才能拿到对应的Double类型数值。

修复后的代码
func convertImperialHeightToCM() -> Double {
    // 替换强制解包为可选绑定,避免userData为nil时直接崩溃
    guard let userData = userData else {
        // 可根据业务需求调整兜底默认值,也可以改成抛出错误的实现
        return 0
    }
    let convertFeetToCm = Measurement(value: userData.userHeightFeet, unit: UnitLength.feet)
    let feetToCentimeters = convertFeetToCm.converted(to: UnitLength.centimeters)

    let convertInchesToCm = Measurement(value: userData.userHeightInches, unit: UnitLength.inches)
    let inchesToCentimeters = convertInchesToCm.converted(to: UnitLength.centimeters)

    let addUpCentimeters = feetToCentimeters + inchesToCentimeters
    
    // 核心修改:从Measurement结构体中取出纯数值返回
    return addUpCentimeters.value
}
额外建议
  • 你当前将单位转换逻辑单独抽成函数的设计是合理的,后续写单元测试时可以直接传入固定的英尺、英寸数值,验证返回的厘米数是否符合预期即可
  • 尽量不要使用!做强制解包,上述代码中用guard let做了安全的可选校验,当userData为空时会走兜底逻辑,不会直接触发崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 08:06:08