MeasurementFormatter не работает должным образом

let userDefined = Measurement(value: Double(userInput.text!)!, unit: UnitMass.kilograms)

let calculatedValue = userDefined.converted(to: UnitMass.grams)

print(calculatedValue)

let formatter = MeasurementFormatter()
formatter.locale = Locale(identifier: "en_US")
Convertedunit.text = formatter.string(from: calculatedValue)

Пользовательский ввод 5,

Выход из print(calculatedValue) является 5000.0g,

Тем не менее, выход Convertedunit.text является 11.003lbs который в фунтах. Я пытался использовать разные методы, но это все еще не в граммах. Кто-нибудь может просветить меня?

1 ответ

MeasurementFormatter преобразует значение в используемую единицу измерения, которая в фунтах в США. Попробуйте изменить язык форматирования на язык европейской страны.

formatter.locale = Locale(identifier: "hu")
Convertedunit.text = formatter.string(from: calculatedValue) /*5 kg*/

Из-за formatter.locale = Locale(identifier: "en_US"), форматтер автоматически преобразует все в британскую систему единиц, которой в данном случае являются фунты. С другой стороны, граммы относятся к метрической системе.

Есть два способа изменить это поведение:

A) Если вы хотите использовать метрическую систему, укажите локаль для страны, которая ее использует, например, Германии.formatter.locale = Locale(identifier: "de_DE"). Не волнуйтесь, это не повлияет на язык строки (например, немецкий: Meter, английский: Meters, французский: Mètres), поскольку он по-прежнему привязан к языку приложения.

Б) Если вы хотите сохранить любой блок, который вы поместили в форматировщик, просто объявите:formatter.unitOptions = .init(arrayLiteral: .providedUnit)Таким образом, форматтер будет генерировать строки с любым модулем, который вы ему предоставили.

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