我怎么知道哪个是iOS上的默认度量系统(英制或公制)?

时间:2011-09-14 08:08:34

标签: ios units-of-measurement

我如何知道iOS上的默认度量系统(英制或公制)?

如何从设备设置中获取此偏好设置,以便知道应用中显示的内容?

感谢

6 个答案:

答案 0 :(得分:73)

NSLocale可以告诉你:

NSLocale *locale = [NSLocale currentLocale]; 
BOOL isMetric = [[locale objectForKey:NSLocaleUsesMetricSystem] boolValue];

只有三个国家不使用公制:美国,利比里亚和缅甸。后者使用自己的系统,前者使用英制单位。

苹果文件说(强调我的):

  

NSLocaleUsesMetricSystem

     

标志的键,指示语言环境是否使用公制系统。   相应的值是布尔NSNumber对象。 如果值为“否”,您通常可以采用美国测量单位(例如,法规英里)。

     

适用于iOS 2.0及更高版本。

答案 1 :(得分:19)

@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

答案 2 :(得分:14)

这是一个快速版本

var locale = NSLocale.currentLocale()
let isMetric = locale.objectForKey(NSLocaleUsesMetricSystem) as! Bool

答案 3 :(得分:10)

对于swift 3

    let locale = NSLocale.current
    let isMetric = locale.usesMetricSystem

答案 4 :(得分:4)

正如其他人之前提到的,英国使用公制和英制单位的混合。

我建议使用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

答案 5 :(得分:2)

您应该只在应用中设置一个设置并让用户选择 - 这就是Apple在Weather应用中所做的。

如果要选择合理的默认值,可以查看区域设置。如果是美国,请选择英制,否则选择公制。这是一种启发式方法,有时会出错,但它只是一个可以改变的默认值。