所以在 iOS 8 中添加了一些格式化程序,例如:NSEnergyFormatter
,NSMassFormatter
和NSLengthFormatter
。这些格式化程序应该确认用户在设置中设置的语言环境。
所以我有这段代码:
NSLengthFormatter *formatter = [[NSLengthFormatter alloc] init];
NSString *converted = [formatter stringFromValue:24.0 unit:NSLengthFormatterUnitInch];
NSLog(@"%@", converted);
此代码输出24 in
,即使我的语言环境设置为斯洛文尼亚语,我认为应该在公制系统中显示长度。
代码对我来说似乎很好,我真的不明白为什么这不会在公制系统中输出值。
格式化程序的重点是什么,如果没有转换?
谢谢!
答案 0 :(得分:2)
对于转换单位,我认为NSLengthFormatter
只接受SI unit长度,特别是" Meter"。
例如(在Swift中):
let formatter = NSLengthFormatter()
formatter.numberFormatter.locale = NSLocale(localeIdentifier: "en-US")
formatter.stringFromMeters(0.5)
结果"1.64 ft"
stringFromValue:unit:
将显示" 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
子类主要针对&#34; HealthKit&#34;框架。
实际上,HealthKit
具有单位转换功能。
在Playground中尝试:
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"