swift - MeasurementFormatter 未按预期工作

标签 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,以磅为单位。我尝试使用不同的方法,但仍然不是以克为单位。谁能赐教一下?

最佳答案

由于 formatter.locale = Locale(identifier: "en_US"),格式化程序会自动将所有内容转换为英制单位系统,在本例中为磅。另一方面,克属于公制。

有两种方法可以改变这种行为:

A) 如果您想使用公制系统,请为使用它的国家/地区指定区域设置,例如德国。 formatter.locale = Locale(标识符:“de_DE”)。别担心,这不会影响字符串的语言(例如德语:Meter、英语:Meters、法语:Mètres),因为它仍然与应用语言绑定(bind)。

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

关于swift - MeasurementFormatter 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48322170/

相关文章:

swift - 在 Swift 4.1 中使用 NSProxy

ios - 在 xcode 8 beta 6 中的 UITableView 中使用 indexPath.row 无法编译

pointers - UnsafeMutablePointer<Int8> 来自 Swift 中的字符串

ios - Xcode 6.3.2 Swift 1.2 NSIndexpath 没有成员 'row'

ios - 在运行时访问 UIView 宽度

ios - 使用 MeasurementFormatter 选择单位

ios - 找出系统默认的单位类型(升/加仑)

swift - 测量格式化程序 : space between value and unit