gpt4 book ai didi

swift - 从测量中获取本地化单位的值(value)

转载 作者:行者123 更新时间:2023-11-28 10:08:21 28 4
gpt4 key购买 nike

我需要获得测量的国际化

let speed = Measurement(value: 15, unit: UnitSpeed.kilometersPerHour)
let formatter = MeasurementFormatter()
formatter.string(from: speed) // is "9.32 mph"
speed.converted(to: .milesPerHour).value // this is what I want, but I have to hardcode the unit I am converting to

我可以在不手动拆分字符串并强制转换的情况下获取值 (9.32) 吗?对于温度,您可以使用 formatter.unitOptions = .temperatureWithoutUnit 但这会停止转换,我仍然会得到一个字符串。

是否有类似 speed.converted(to: default).value 的东西来获取本地化测量的值?

最佳答案

我认为您所追求的是语言环境的测量系统。 Mac 目前支持三种系统:公制、美国和英国。英国使用公制表示长度和重量,但仍然使用英里/英里/小时表示道路距离和速度,因此这里的第三个选项 - usesMetricSystem 属性仅支持两个选项并返回 true对于英国。

要在 Swift 中获取测量系统需要使用 NSLocale,此扩展会将其添加到 Locale:

extension Locale
{
var measurementSystem : String?
{
return (self as NSLocale).object(forKey: NSLocale.Key.measurementSystem) as? String
}
}

为了增加“乐趣”,Apple 实际上并没有指定此属性的值,他们给出了示例而不是完整的定义。您可以获得已知的三个值,在已知使用它们的三个区域中查询属性,例如您可以将以下内容添加到扩展中:

   static let metricMeasurementSystem = Locale(identifier: "fr_FR").measurementSystem!
static let usMeasurementSystem = Locale(identifier: "en_US").measurementSystem!
static let ukMeasurementSystem = Locale(identifier: "en_UK").measurementSystem!

当然,如果 Swift 确实支持它们,它可能会为这些可能性定义一个 enum,您也可以这样做。

HTH

顺便说一句:对于那些认为英国很尴尬的人来说,“美国”系统只在三个国家使用:美国、缅甸和利比里亚。

关于swift - 从测量中获取本地化单位的值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50914297/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com