NSMassFormatter не может преобразовать граммы в фунты (NSUnitMass) или отображаемое значение - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь модернизировать свои вызовы API и хочу использовать NSMassFormatter.Проблема проста.Я не могу получить какой-либо вывод (нацеливаясь на имперский язык).NSMeasurement's описание верно.

Как заставить NSMassFormatter автоматически отображать вес "123 фунта", если я предоставлю грамм?

NSNumber *weightInGrams = @(62453.0);

NSMassFormatter *weightFormatter = [NSMassFormatter new];
weightFormatter.forPersonMassUse = YES;
weightFormatter.numberFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_UK"];

NSMeasurement *weightMeasurement = [[NSMeasurement alloc] initWithDoubleValue:[weightInGrams doubleValue] unit:[NSUnitMass grams]];

NSString *weightString = [weightFormatter unitStringFromValue:[weightInGrams doubleValue] unit:NSMassFormatterUnitPound];
NSLog(@"%@", weightMeasurement);
NSLog(@"%@", weightString);

2019-03-26 17:23:37.535156+0100 testasa[65239:9291466] <NSMeasurement: 0x60800002d020> value: 62453.000000 unit: g
2019-03-26 17:23:37.535169+0100 testasa[65239:9291466] 

Ответы [ 2 ]

2 голосов
/ 26 марта 2019

Форматер не выполняет никаких преобразований. Это просто форматирует количество. Грамм по-прежнему является граммом на любом языке.

Однако NSMassFormatter предоставляет удобный метод, основанный на килограммах. Так, например:

let grams = 62453.0
let measurement = Measurement(value: grams, unit: UnitMass.grams)
let kilos = measurement.converted(to: .kilograms)
let formatter = MassFormatter()
formatter.isForPersonMassUse = true
let s = formatter.string(fromKilograms: kilos.value)
print(s) // "137.685 lb” on my machine
0 голосов
/ 27 марта 2019

Для тех, кто придет сюда в будущем. Вы получите правильную строку, если вы не измените NSLocale в коде. Если вам нужно изменить это, сделайте это в Системных настройках. stringFromKilograms - это ключевой метод, который предоставляет метрическую строку. Также можно настроить NSNumberFormatter для печати округленных значений, установив maximumFractionDigits в 0.

После этого вам не нужно проверять метрическую систему с помощью [[NSLocale currentLocale] usesMetricSystem]

NSNumber *weightInGrams = @(62403.0);
NSMassFormatter *formatter = [NSMassFormatter new];
formatter.forPersonMassUse = YES;
formatter.unitStyle = NSFormattingUnitStyleShort;
//formatter.numberFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; -> source of bug
formatter.numberFormatter.maximumFractionDigits = 0;

NSString *weightString = [formatter stringFromKilograms:[weightInGrams doubleValue]/1000]; 

Печатает правильно:

(lldb) po weightString3
138lb
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...