如何从测量格式化程序结果中获取本地化的单位符号



我正在尝试获取使用测量格式化程序获得的任何测量的本地化单位符号。

例如,如果区域设置使用华氏度,但应用程序将其数据存储在摄氏度中,我将创建一个度量格式化程序,如下所示:

let formatter = MeasurementFormatter()
let measurement = Measurement(value: 10, unit: UnitTemperature.celsius)
formatter.string(from: measurement)

最后一行会给我"50°F"。现在我想从测量中获取"°F"值。

我试过使用

formatter.string(from: measurement.unit)

但这只会给我"C度">

提前感谢!

您可能只需要像这样设置格式化程序的区域设置:

formatter.locale = Locale(identifier: "en-US")

或者,如果您想获取设备的当前区域设置并从中进行设置,请执行以下操作:

formatter.locale = Locale.current

然后

formatter.string(from: measurement.unit)

派对有点晚了,基于 Lars 的回答和 Daniel 的评论,以下代码允许您获得本地化的单位和值:

let measurement = Measurement<UnitTemperature>(value: 10, unit: .celsius)
let formatter = MeasurementFormatter()
let localMeasurement = measurement.converted(to: UnitSpeed(forLocale: .autoupdatingCurrent))
let unit = formatter.string(from: localMeasurement.unit)
let value = localMeasurement.value //.rounded()

当我的Mac pref设置为以华氏度为单位的温度en_US时,以下代码为我提供了Objective-C中您想要的内容:

NSUnitTemperature * fahrenheit = [NSUnitTemperature fahrenheit];
NSMeasurement * measurement = [[NSMeasurement alloc] initWithDoubleValue:35 unit:fahrenheit];
NSMeasurementFormatter * formatter = [[NSMeasurementFormatter alloc] init];
NSLog(@"%@", measurement.unit.symbol); // °F

此输出: °F

为了获得"°F",我认为您必须将格式化程序的区域设置设置为"en_US"。

最新更新