这类似于我昨天提出的问题,但我得到的答案在这种情况下似乎不起作用.
我从Core Location获得了以米为单位的海拔高度值.我想以本地化的形式显示这些内容.举个例子,我现在的海拔高度是海拔1839米.这应该显示为6033英尺.我能做的最好的MeasurementFormatter是"1.143英里".
let meters : Double = 1839
let metersMeasurement = Measurement(value: meters, unit: UnitLength.meters)
let measurementFormatter = MeasurementFormatter()
measurementFormatter.locale = Locale(identifier: "en_US")
let localizedString = measurementFormatter.string(from: metersMeasurement)
Run Code Online (Sandbox Code Playgroud)
.naturalScale回答我之前的问题的选项在这里没有帮助.我认为这是框架的限制,但我想知道是否有人现在有一个解决方法.
我已经实现了 NSMeasurementFormatter 并且遇到了一个奇怪的问题。当应用程序加载为 en_US 时,我将所有体重作为磅加载到文本框中,太棒了。但是,当我将应用程序切换到 en_GB 并加载相同的数据时,文本框中什么也没有出现。
当我打印对象时,打印输出会显示重量(以千克为单位),因此它们可以正确转换,但它们不会加载到用户可见的实际文本框中。
这有什么明确的原因吗?我花了几个小时试图弄清楚为什么它适用于一个位置但不适用于另一个位置!感谢您的见解,这是代码:
这是练习的初始保存,根据此时的应用程序设置,它要么以一种方式进行,要么以另一种方式进行
if self.localeIdentifier == "en_GB" {
let kgWeight = Measurement(value: Double(self.userExerciseWeight.text!)!, unit: UnitMass.kilograms)
newUserExercise.weight = kgWeight as NSObject?
newUserExercise.initialMetricSystem = self.localeIdentifier
print("SAVED AS \(localeIdentifier) METRIC")
} else if self.localeIdentifier == "en_US" {
let lbsWeight = Measurement(value: Double(self.userExerciseWeight.text!)!, unit: UnitMass.pounds)
newUserExercise.weight = lbsWeight as NSObject?
newUserExercise.initialMetricSystem = self.localeIdentifier
print("SAVED AS \(localeIdentifier) IMPERIAL")
}
Run Code Online (Sandbox Code Playgroud)
然后这是我稍后重新加载该对象重量属性的尝试
let formatter = MeasurementFormatter()
let exerciseWeight = userExercise.weight as! Measurement<Unit>
let localeIdentifier = UserDefaults.standard.object(forKey: "locale")
let locale = …Run Code Online (Sandbox Code Playgroud)