MeasurementFormatter工作异常:克单位转换结果显示为磅
解决MeasurementFormatter显示磅而非克的问题
嘿,这个问题我碰到过!核心原因是MeasurementFormatter会根据你设置的locale自动选择当地常用的单位——你设置了en_US,而美国日常用磅(lbs)作为质量单位,所以哪怕你传入的是克的Measurement,它也会自动转成磅来显示,这是它的默认行为。
快速解决方法
只需要给formatter加上一行配置,强制它使用你传入的Measurement的单位:
let userDefined = Measurement(value: Double(userInput.text!)!, unit: UnitMass.kilograms) let calculatedValue = userDefined.converted(to: UnitMass.grams) print(calculatedValue) let formatter = MeasurementFormatter() formatter.locale = Locale(identifier: "en_US") // 关键:强制使用传入的单位,不自动转换 formatter.unitOptions = .providedUnit // 可选:设置单位显示样式,比如.short显示"5000 g",.long显示"5000 grams" formatter.unitStyle = .short Convertedunit.text = formatter.string(from: calculatedValue)
加上formatter.unitOptions = .providedUnit后,Formatter就会严格按照calculatedValue的克单位来输出,不会再自动转成磅了。
额外建议:避免强制解包崩溃
你的代码里用了两次强制解包Double(userInput.text!)!,如果用户输入非数字内容,APP会直接崩溃。建议用可选绑定处理输入:
guard let inputText = userInput.text, let inputValue = Double(inputText) else { Convertedunit.text = "请输入有效数字" return } let userDefined = Measurement(value: inputValue, unit: UnitMass.kilograms) let calculatedValue = userDefined.converted(to: UnitMass.grams) let formatter = MeasurementFormatter() formatter.locale = Locale(identifier: "en_US") formatter.unitOptions = .providedUnit formatter.unitStyle = .short Convertedunit.text = formatter.string(from: calculatedValue)
这样处理后,输入无效内容时会给用户提示,而不是崩溃。
内容的提问来源于stack exchange,提问作者Big Alex
相关产品推荐
相关产品推荐

