MeasurementFormatter未按预期工作

时间:2018-01-18 13:09:39

标签: swift measurementformatter

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")
Convertedunit.text = formatter.string(from: calculatedValue)

用户输入为5

print(calculatedValue)的输出为5000.0g

但是,Convertedunit.text的输出为11.003lbs,以磅为单位。我尝试使用不同的方法,但它仍然不是克。谁能开导我?

1 个答案:

答案 0 :(得分:0)

由于formatter.locale = Locale(identifier: "en_US"),格式化程序将自动将所有内容转换为英制单位制,在这种情况下为磅。另一方面,克属于公制。

有两种方法可以更改此行为:

A)如果要使用公制,请为使用公制的国家/地区指定语言环境。 formatter.locale = Locale(identifier: "de_DE")。不用担心,这不会影响字符串的语言(例如德语:Meter,英语:Meters,法语:Mètres),因为它仍然与应用程序语言绑定。

B)如果要保留放入格式化程序中的任何单位,只需声明:formatter.unitOptions = .init(arrayLiteral: .providedUnit) 这样,格式化程序将使用您提供的任何单位生成字符串。