NSLengthFormatter не отображает правильное значение

В iOS 8 добавлено несколько форматировщиков, таких как: NSEnergyFormatter, NSMassFormatter а также NSLengthFormatter, Предполагается, что эти средства форматирования подтверждают языковой стандарт пользователя, заданный в настройках.

Итак, у меня есть этот код:

NSLengthFormatter *formatter = [[NSLengthFormatter alloc] init];
NSString *converted = [formatter stringFromValue:24.0 unit:NSLengthFormatterUnitInch];

NSLog(@"%@", converted);

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

Код кажется мне подходящим, и я не очень понимаю, почему это не выводит значение в метрической системе.

Документация, видимо, еще не сделана: https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSFormatter_Class/

Какой именно смысл в форматере, если он не конвертируется?

Спасибо!

1 ответ

Я думаю, что для конвертации единиц NSLengthFormatter принимает только длину единицы СИ, в частности, "Метр".

Например (в Swift):

let formatter = NSLengthFormatter()
formatter.numberFormatter.locale = NSLocale(localeIdentifier: "en-US")
formatter.stringFromMeters(0.5)

Результаты "1.64 ft"

stringFromValue:unit: это отобразить строку "единица" для локали.

let formatter = NSLengthFormatter()
formatter.numberFormatter.locale = NSLocale(localeIdentifier: "fr-FR")
formatter.unitStyle = NSFormattingUnitStyle.Long
formatter.stringFromValue(12.0, unit: NSLengthFormatterUnit.Inch);

Результаты "12 pouces"

UPD:

Я думаю, эти новые NSFormatter Подклассы в основном предназначены для работы с фреймворком HealthKit.
На самом деле, HealthKit имеет возможность преобразования единиц.

Попробуйте это на детской площадке:

import HealthKit

// input value
let foot = HKUnit.footUnit()
let footQuantity = HKQuantity(unit: foot, doubleValue: 1.23)

// to convert unit
let mm = HKUnit(fromString: "mm")
let mmVal = footQuantity.doubleValueForUnit(mm) // -> 374.904
let mmQuantity = HKQuantity(unit: mm, doubleValue: mmVal)

// coordinate with formatter
let formatter = NSLengthFormatter()
let mmFormat = HKUnit.lengthFormatterUnitFromUnit(mm)
formatter.numberFormatter.locale = NSLocale(localeIdentifier: "sl-SI")
formatter.stringFromValue(mmVal, unit: mmFormat) // -> "374,904 mm"
Другие вопросы по тегам