我在获取新的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英尺”。
.providedUnit上的MeasurementFormatter选项没有帮助-只是给我一个以米为单位的结果。

我可以查询当前的语言环境并自己处理,但这正是MeasurementFormatter不必要的事情。有什么办法让它做我需要的吗?

最佳答案

您应该将格式程序的unitOptions设置为naturalScale:

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

而且,仅当您希望任何语言环境中的每个用户都能看到特定语言环境中的值时,才应设置语言环境。

10-08 06:09