使用 MeasurementFormatter 选择单位 [英] Choosing units with MeasurementFormatter

查看:10
本文介绍了使用 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆