let formatter = MeasurementFormatter.init()
let temperature = Measurement.init(value: 37.0, unit: UnitTemperature.celsius)
let localTemperature = formatter.string(from: temperature)
if(localTemperature.contains("C")) {
print("UNIT IS °C")
} else {
print("UNIT IS °F")
}
protocol LocalizableDimension: Dimension {
associatedtype T: Dimension
static var allUnits: [T] { get }
}
extension LocalizableDimension {
static var current: T {
let baseUnit = allUnits[0]
let formatter = MeasurementFormatter()
formatter.locale = .current
let measurement = Measurement(value: 0, unit: baseUnit)
let string = formatter.string(from: measurement)
for unit in allUnits {
if string.contains(unit.symbol) {
return unit
}
}
return baseUnit
}
}
5条答案
按热度按时间t8e9dugd1#
这可以通过Swift中的MeasurementFormatter来完成。
此方法不使用任何私有API。请记住在实际设备(iOS 10+)上运行此方法,因为模拟器没有此选项。
2ul0zpep2#
kCFLocaleTemperatureUnitKey
密钥没有记录。所以苹果可能有问题。请阅读this thread了解更多信息。他的应用程序因为这个密钥而被拒绝。6rqinv9w3#
您需要公开NSLocaleKey类型的NSLocaleTemperatureUnit,
然后,您将能够根据温度单位NSLocaleKey访问NSLocale信息。
例如
csga3l584#
我已经修改了其他答案,以获得更优雅的选择
inkz8wg95#
根据其他人的回答,我把它做得更一般一些
这可以进一步推广,使其接受任何区域设置,而不仅仅是当前区域设置,并提供与iOS 16开始可用的API类似的API,在iOS 16中,您可以从作为参数提供的给定区域设置创建维度。
要使用此功能,您仍然需要使域的相关维度符合此协议,如
有了这个,你可以