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

问题描述 投票:0回答:8

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

如何从设备设置中获取此首选项,以便我知道在我的应用程序中显示什么?

谢谢

ios units-of-measurement
8个回答
86
投票

NSLocale
可以告诉你:

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

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

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

NSLocaleUsesMetricSystem

指示区域设置是否使用公制的标志的键。 对应的值是一个 Boolean NSNumber 对象。 如果该值为“否”,您通常可以采用美国测量单位(例如法定英里)。

适用于 iOS 2.0 及更高版本。


42
投票

@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

14
投票

这是一个快速版本

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

14
投票

对于迅捷3

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

6
投票

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

我建议使用 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
投票
// Before iOS 16
Locale.current.usesMetricSystem

// iOS 16 and up
Locale.current.measurementSystem == .metric

usesMetricSystem
在 iOS 16 上已弃用


4
投票

您可能应该在应用程序中进行设置并让用户选择 - 这就是 Apple 在天气应用程序中所做的。

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


0
投票

您可以向您的

Locale
添加扩展程序以方便访问:

extension Locale {
    static func metricsSystem() -> Bool {
        current.measurementSystem == .metric
    }
}

然后调用它:

let isMetric = Locale.metricsSystem
© www.soinside.com 2019 - 2024. All rights reserved.