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
相关产品推荐
相关产品推荐

