使用MeasurementFormatter选择单位

Tom*_*ton 3 ios swift3 nsmeasurementformatter measurementformatter

这类似于我昨天提出问题,但我得到的答案在这种情况下似乎不起作用.

我从Core Location获得了以米为单位的海拔高度值.我想以本地化的形式显示这些内容.举个例子,我现在的海拔高度是海拔1839米.这应该显示为6033英尺.我能做的最好的MeasurementFormatter是"1.143英里".

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)
Run Code Online (Sandbox Code Playgroud)

.naturalScale回答我之前的问题的选项在这里没有帮助.我认为这是框架的限制,但我想知道是否有人现在有一个解决方法.

Leo*_*bus 7

只需创建一个Double扩展即可将您的仪表单位转换为英尺.然后只需使用MeasurementFormatter根据需要显示它:

extension Double {
    var metersToFeet: Double {
        return Measurement(value: self, unit: UnitLength.meters)
            .converted(to: .feet)
            .value
    }
}
Run Code Online (Sandbox Code Playgroud)

操场

extension Formatter {
    static let measurement: MeasurementFormatter = {
       let formatter = MeasurementFormatter()
        formatter.locale = Locale(identifier: "en_US")
        formatter.unitOptions = .providedUnit
        formatter.numberFormatter.maximumFractionDigits = 0
        formatter.unitStyle = .long
        return formatter
    }()
}
Run Code Online (Sandbox Code Playgroud)