我如何知道iOS上默认的度量系统是英制还是公制?
我如何从设备设置中获取此首选项,以便知道在我的应用程序中显示什么?
谢谢
我如何知道iOS上默认的度量系统是英制还是公制?
我如何从设备设置中获取此首选项,以便知道在我的应用程序中显示什么?
谢谢
NSLocale
可以告诉你:
NSLocale *locale = [NSLocale currentLocale];
BOOL isMetric = [[locale objectForKey:NSLocaleUsesMetricSystem] boolValue];
仅有三个国家不使用公制系统:美国、利比里亚和缅甸。后者使用自己的系统,前两者使用英制单位。
苹果的文档中提到(我的强调):
NSLocaleUsesMetricSystem
指示区域设置是否使用公制系统的标志的键。 相应的值是一个布尔NSNumber对象。如果该值为NO,则通常可以假定使用美国的计量单位(例如英里)。
iOS 2.0及以后版本可用。
@DarkDust为Swift3提供的答案
//User region setting return
let locale = Locale.current //NSLocale.current
//Returns true if the locale uses the metric system
let isMetric = locale.usesMetricSystem
这里是一个 Swift 版本
var locale = NSLocale.currentLocale()
let isMetric = locale.objectForKey(NSLocaleUsesMetricSystem) as! Bool
对于 Swift 3
let locale = NSLocale.current
let isMetric = locale.usesMetricSystem
Locale.current.usesMetricSystem
еңЁ iOS 9 дёӯиҝҗиЎҢиүҜеҘҪгҖӮ - Graham Perks正如其他人之前提到的那样,英国使用公制和英制混合计量单位。
我建议使用在iOS 10中引入的新MeassurementFormatter
,它可以处理大多数这些差异:
import Foundation
let locale = Locale(identifier: "EN_UK")
locale.usesMetricSystem // true!
var formatter = MeasurementFormatter()
formatter.locale = locale
formatter.string(from: Measurement(value: 1000, unit: UnitLength.meters)) // 0.621 mi
要将距离渲染为本地、自然单位的字符串,请使用以下代码:
let distanceInMeters: CLLocationDistance = 1000
let formatter = MeasurementFormatter()
formatter.string(from: Measurement(value: distanceInMeters, unit: UnitLength.meters)) // 0.621 mi
官方文档:https://developer.apple.com/documentation/foundation/measurementformatter
这是有关于it技术的测量格式化器。// Before iOS 16
Locale.current.usesMetricSystem
// iOS 16 and up
Locale.current.measurementSystem == .metric
usesMetricSystem
在 iOS 16 上已被弃用。
你的应用程序应该提供一个设置选项,让用户自己选择。这就是苹果天气应用程序所做的。
如果你想选择一个合理的默认单位,可以查看地区设置。如果是美国,则选择英制单位,否则选择公制单位。这是一种启发式方法,有时会出现错误,但它只是一个可以更改的默认值。
Locale
添加一个扩展,以便更方便地访问:extension Locale {
static func metricsSystem() -> Bool {
current.measurementSystem == .metric
}
}
let isMetric = Locale.metricsSystem
UIApplicationDelegate
的applicationDidBecomeActive:
方法中进行检查(或订阅相应的通知UIApplicationDidBecomeActiveNotification
),和/或者订阅NSCurrentLocaleDidChangeNotification
通知。 - DarkDust