【发布时间】:2011-11-16 19:24:02
【问题描述】:
我如何知道 iOS 上的默认度量系统(英制还是公制)?
如何从设备设置中获取此首选项,以便我知道要在我的应用中显示什么?
谢谢
【问题讨论】:
我如何知道 iOS 上的默认度量系统(英制还是公制)?
如何从设备设置中获取此首选项,以便我知道要在我的应用中显示什么?
谢谢
【问题讨论】:
正如其他人之前提到的,英国使用公制和英制单位。
我建议使用 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
【讨论】:
@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 3
let locale = NSLocale.current
let isMetric = locale.usesMetricSystem
【讨论】:
Locale.current.usesMetricSystem 在 iOS 9 中运行良好。
这是一个快速版本
var locale = NSLocale.currentLocale()
let isMetric = locale.objectForKey(NSLocaleUsesMetricSystem) as! Bool
【讨论】:
NSLocale 可以告诉你:
NSLocale *locale = [NSLocale currentLocale];
BOOL isMetric = [[locale objectForKey:NSLocaleUsesMetricSystem] boolValue];
只有三个国家不使用公制:美国、利比里亚和缅甸。后者使用自己的系统,前两者使用英制单位。
Apples 文档说(强调我的):
NSLocaleUsesMetricSystem指示区域设置是否使用公制系统的标志键。 对应的值是一个布尔 NSNumber 对象。 如果值为 NO,您通常可以采用美国计量单位(例如,法定英里)。
适用于 iOS 2.0 及更高版本。
【讨论】:
UIApplicationDelegate的applicationDidBecomeActive:方法(或订阅相应的通知,UIApplicationDidBecomeActiveNotification)和/或订阅NSCurrentLocaleDidChangeNotification。
您可能应该在您的应用中设置一个设置并让您的用户选择——这就是 Apple 在 Weather 应用中所做的。
如果您想选择一个合理的默认值,您可以查看语言环境。如果是美国,选择英制,否则选择公制。这是一种启发式,有时会出错,但它只是一个可以更改的默认值。
【讨论】: