我希望有人能帮我解决这个让我抓狂的问题。
我想在Measurements中使用formatted()修饰符,这样我就可以得到特定于区域设置的单位,它对质量和温度非常有效。
我正确地得到了oz/g和F/C,但对于体积,我得到了cm 3/in 3而不是ml/floz。我意识到这是一个体积单位,但它不是我想要的。
Text("\(Measurement(value: Double(volume), unit: UnitVolume.milliliters).formatted())")
Text("\(Measurement(value: Double(mass), unit: UnitMass.grams).formatted())")
Text("\(Measurement(value: Double(temp), unit: UnitTemperature.celsius).formatted())")
我知道我能做到
Text("\(Measurement(value: Double(brew.water), unit: UnitVolume.milliliters).formatted(.measurement(width: .abbreviated, usage: .asProvided, numberFormatStyle: .number)))")
但是我必须自己找出语言环境。有没有办法用swiftui中的内置程序来实现这一点?
先谢谢你了
2条答案
按热度按时间oaxa6hgo1#
可以使用
converted
和MeasurementFormatter
在最简单的形式中,它看起来像
但在
extension
中,您可以添加可重复使用的自定义,它的工作原理类似于formatted
,但允许iOS 14+。然后您的
View
将演变为类似于您还可以扩展
Measurement
本身并添加一个自动提供字符串的方法。然后你不必使用
formatter
,你可以调用toString()
,这将允许一个适用于所有SwiftUI版本的答案。要显示区域设置调整的测量值,只需将
.current
添加到Locale
然后,当您希望单位按地区调整显示时,只需将
unitOptions
参数设置为nil
6kkfgxo02#
您的最后一次尝试很接近。只需将用法更改为
.liquid
而不是asProvided
。这将给我的结果是“fl oz”,区域设置为en_US。
请注意,
MeasurementFormatUnitUsage<UnitVolume>.liquid
仅在iOS 16.0中可用,因此此解决方案不适用于iOS 15。