2016-10-03 69 views
0

我无法使新的MeasurementFormatter类以适当的单位给出结果。我希望以本地化字符串(米或英尺)显示的米数值,具体取决于用户的区域设置。使用MeasurementFormatter以英尺显示仪表

我有这样的:

let meters : Double = 10 
let metersMeasurement = Measurement(value: meters, unit: UnitLength.meters) 

let measurementFormatter = MeasurementFormatter() 
measurementFormatter.locale = Locale(identifier: "en_US") 

let localizedString = measurementFormatter.string(from: metersMeasurement) 

这给了我 “0.006mi” 的字符串。我想,这是正确的,但将10米转换为英里有点荒谬。我想要的是“32.8英尺”。

MeasurementFormatter上的.providedUnit选项没有帮助 - 这只会给我一个以米为单位的结果。

我可以查看当前的语言环境并自己处理,但这正是MeasurementFormatter应该不必要的那种类型。有什么办法让它做我需要的吗?

+1

在您的单元格式化程序中设置'naturalScale'选项https://developer.apple.com/reference/foundation/measurementformatter.unitoptions/1642065-naturalscale – Paulw11

+0

除了naturalScale,您需要将数字格式化程序的最大数字设置为1'measurementFormatter .nu​​mberFormatter.maximumFractionDigits = 1' –

+0

@LeoDabus这将是可选的。 – rmaddy

回答

0

应设置格式的unitOptionsnaturalScale

let measurementFormatter = MeasurementFormatter() 
measurementFormatter.unitOptions = .naturalScale 

如果你想在任何语言环境中的每个用户看到的特定区域的价值,你应该只设置语言环境。

+0

我在我的问题中包含了语言环境,以防某些人在他们的语言环境与我的语言环境不同时尝试使用该代码 - 我想强制美国单元进行演示。 –

+0

我也有这个问题的略有不同的版本,这个答案不适用。也许你可以[看看它](http://stackoverflow.com/questions/39858828/choosing-units-with-measurementformatter)? –