在 Swift 中,当我创建自定义单位时,我只能定义一个符号。对于内置单元,可以有短、中和长单元。如何为自定义单位设置其他单位样式?
extension UnitEnergy {
static let footPounds = UnitEnergy(symbol: "ft-lbs", converter: UnitConverterLinear(coefficient: 1))
}
var test = Measurement<UnitEnergy>( value: 10, unit: .footPounds)
var formatter = MeasurementFormatter()
formatter.locale = Locale(identifier: "es")
formatter.unitStyle = .short
print( formatter.string(from: test))
formatter.unitStyle = .medium
print( formatter.string(from: test))
formatter.unitStyle = .long
print( formatter.string(from: test))
formatter.unitOptions = .providedUnit
formatter.unitStyle = .short
print( formatter.string(from: test))
formatter.unitStyle = .medium
print( formatter.string(from: test))
formatter.unitStyle = .long
print( formatter.string(from: test))
输出:
10 J
10 J
10 julios
10 ft-lbs
10 ft-lbs
10 ft-lbs
最佳答案
简答 - 你不能。 API 不提供任何允许您为三种单位样式提供不同符号的工具。
对于自定义单位,MeasurementFormatter
只有定义自定义单位时使用的一个符号。
请记住,对于三种不同的单位样式,需要的不仅仅是三种不同的可能符号。您实际上需要三种不同的字符串格式,因为有些单位可能有空格或其他标点符号,有些可能没有。有些可能出现在值之前,有些可能出现在值之后。
然后是单元本地化的问题。 Foundation 框架为所有受支持的语言提供了所有这些信息,因此 MeasurementFormatter
可以为所有预定义单位显示所有受支持语言的所有三种单位样式。
由于 API 确实支持自定义单位,但无法提供单位样式特定符号,因此我建议向 Apple 提交增强请求。
关于swift - 在 Swift 3 中设置中长测量符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40557269/