0

因此在iOS 8NSEnergyFormatter中添加了一些格式化程序,例如:NSMassFormatterNSLengthFormatter. 这些格式化程序应该确认设置中设置的用户语言环境。

所以我有这个代码:

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

NSLog(@"%@", converted);

此代码输出24 in,即使我的语言环境设置为Slovenian,我认为它应该以公制显示长度。

代码对我来说似乎很好,我真的不明白为什么这不是以公制输出值。

文档显然还没有完成:https ://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSFormatter_Class/

如果不进行转换,格式化程序到底有什么意义?

谢谢!

4

1 回答 1

2

我认为,对于转换单位,NSLengthFormatter只接受SI 单位长度,特别是“米”。

例如(在 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"

升级版:

我认为,这些新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"
于 2014-09-27T14:36:32.377 回答