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)
Таким образом, форматтер будет генерировать строки с любым модулем, который вы ему предоставили.