SwiftUI自定义流量UnitFlow测量单位报baseUnit未重写错误如何解决?
自定义流量单位Dimension子类报错解决方案
错误原因
Foundation框架的Dimension类要求所有自定义子类必须重写类属性baseUnit,作为所有同维度单位换算的基准。你仅定义了同名的静态存储属性,没有覆盖父类要求实现的类属性,因此触发运行时异常。
同时你当前的单位换算系数定义错误,会导致后续换算结果不符合预期。
修复后的完整代码
class UnitFlow: Dimension { static let cubicMeterPerSecond = UnitFlow(symbol: "m3/s", converter: UnitConverterLinear(coefficient: 1.0)) static let cubicMeterPerMinute = UnitFlow(symbol: "m3/min", converter: UnitConverterLinear(coefficient: 1/60.0)) static let cubicMeterPerHour = UnitFlow(symbol: "m3/h", converter: UnitConverterLinear(coefficient: 1/3600.0)) // 其余自定义单位可按相同规则补充 // 核心修复:重写父类要求的baseUnit类属性 override class var baseUnit: UnitFlow { return cubicMeterPerSecond } }
补充说明
UnitConverterLinear的coefficient参数规则为:1个当前单位等于多少个基准单位。比如1立方米每分钟等于1/60立方米每秒(基准单位),因此系数填1/60.0,你原代码写的60.0会导致换算结果完全错误。
修改完成后再执行单位转换的代码即可正常运行。
内容的提问来源于stack exchange,提问作者Chiel
相关产品推荐
相关产品推荐

