Используйте MeasurementFormatter для отображения метров в футах

У меня проблемы с получением нового MeasurementFormatter класс, чтобы дать мне результаты в соответствующих единицах. У меня есть значения в метрах, которые я хочу отображать в локализованных строках, в метрах или футах в зависимости от локали пользователя.

У меня есть это:

let meters : Double = 10
let metersMeasurement = Measurement(value: meters, unit: UnitLength.meters)

let measurementFormatter = MeasurementFormatter()
measurementFormatter.locale = Locale(identifier: "en_US")

let localizedString = measurementFormatter.string(from: metersMeasurement)

Это дает мне строку "0.006mi". Думаю, это правильно, но конвертировать 10 метров в мили довольно нелепо. То, что я хочу, это "32,8 фута".

.providedUnit вариант на MeasurementFormatter не помогает - это просто дает мне результат в метрах.

Я мог бы посмотреть текущую локаль и разобраться с этим сам, но это именно то, что MeasurementFormatter предполагается сделать ненужным. Есть ли способ заставить его делать то, что мне нужно?

1 ответ

Решение

Вы должны установить форматировщик unitOptions в naturalScale:

let measurementFormatter = MeasurementFormatter()
measurementFormatter.unitOptions = .naturalScale

И вы должны установить локаль только в том случае, если вы хотите, чтобы каждый пользователь в любой локали увидел значение в конкретной локали.

Другие вопросы по тегам