使用 MeasurementFormatter 选择单位 [英] Choosing units with MeasurementFormatter
问题描述
这类似于我昨天问的一个问题,但是在这种情况下,我得到的答案似乎不起作用.
This is similar to a question I asked yesterday but the answer I got doesn't seem to work in this case.
我正在从 Core Location 获取以米为单位的海拔高度值.我想以本地化的形式显示这些.例如,我现在所在的海拔高度为 1839m.这应该显示为 6033 英尺.我能用 MeasurementFormatter
做的最好的事情是1.143 英里".
I'm getting altitude values in meters from Core Location. I want to display these in a localized form. As an example, the altitude where I am right now is 1839m above sea level. This should be displayed as 6033 feet. The best I can do with MeasurementFormatter
is "1.143 mi".
let meters : Double = 1839
let metersMeasurement = Measurement(value: meters, unit: UnitLength.meters)
let measurementFormatter = MeasurementFormatter()
measurementFormatter.locale = Locale(identifier: "en_US")
let localizedString = measurementFormatter.string(from: metersMeasurement)
回答我上一个问题的 .naturalScale
选项在这里没有帮助.我认为这是框架的限制,但我想知道现在是否有人有解决方法.
The .naturalScale
option that answered my previous question doesn't help here. I think this is a limitation of the framework, but I wonder if anyone has a workaround for now.
推荐答案
您只需要将 UnitLength 从米转换为英尺.您还可以创建自定义美国测量格式器以根据需要进行显示:
You just need to convert your UnitLength from meters to feet. You can also create a custom US measurement formatter to display it as needed:
extension Measurement where UnitType == UnitLength {
private static let usFormatted: MeasurementFormatter = {
let formatter = MeasurementFormatter()
formatter.locale = Locale(identifier: "en_US")
formatter.unitOptions = .providedUnit
formatter.numberFormatter.maximumFractionDigits = 0
formatter.unitStyle = .long
return formatter
}()
var usFormatted: String { Measurement.usFormatted.string(from: self) }
}
<小时>
游乐场
let value: Double = 1839
let meters: Measurement<UnitLength> = .init(value: value, unit: .meters)
let feet = meters.converted(to: .feet)
let formatted = feet.usFormatted
print(formatted) // "6,033 feet"
这篇关于使用 MeasurementFormatter 选择单位的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!