【问题标题】:How do I know which is the default measure system (imperial or metric) on iOS?我如何知道 iOS 上的默认度量系统(英制还是公制)?
【发布时间】:2011-11-16 19:24:02
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: ios units-of-measurement


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      @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
      

      【讨论】:

        【解决方案3】:

        对于 Swift 3

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

        【讨论】:

        • 但仅适用于 iOS 10+;我不清楚你如何在面向 iOS 9 的 Swift 3 应用程序中做到这一点。
        • Locale.current.usesMetricSystem 在 iOS 9 中运行良好。
        【解决方案4】:

        这是一个快速版本

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

        【讨论】:

        • 谢谢!对于 Swift 2 将是: let locale = NSLocale.currentLocale()
        【解决方案5】:

        NSLocale 可以告诉你:

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

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

        Apples 文档说(强调我的):

        NSLocaleUsesMetricSystem

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

        适用于 iOS 2.0 及更高版本。

        【讨论】:

        • 注:英国使用公制和英制的组合。重量往往以公斤为单位,但距离(尤其是在道路上)仍以英里为单位。
        • @DarkDust 谢谢,这确实是一个解决方案。我现在唯一的问题是如果用户从 iPad 首选项更改区域设置,同时在多任务处理中运行我的应用程序,如何更新我的应用程序中的设置。我只能在 viewDidAppear 中检查它,但有更好的解决方案吗?
        • @Patrick:签入UIApplicationDelegateapplicationDidBecomeActive:方法(或订阅相应的通知,UIApplicationDidBecomeActiveNotification)和/或订阅NSCurrentLocaleDidChangeNotification
        • @JamesWebster 为了给人们称重,特别是许多英国人仍然使用石头,据我所知,世界上其他任何地方都没有积极使用石头
        【解决方案6】:

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

        如果您想选择一个合理的默认值,您可以查看语言环境。如果是美国,选择英制,否则选择公制。这是一种启发式,有时会出错,但它只是一个可以更改的默认值。

        【讨论】:

        • 我正在努力做到这一点。我有一个视图控制器,它应该显示单位系统(cm / ft&inch)并在两者之间进行转换。我制作了一个带有拨动开关的设置包(关闭:公制/打开:英制,默认值:关闭)。这在我第一次启动应用程序时有效。但是,如果我更改为英制,则该更改会生效,但更改回关闭(-> 公制)不会产生任何影响。想法?
        猜你喜欢
        • 2016-07-04
        • 2019-01-15
        • 1970-01-01
        • 2019-06-29
        • 1970-01-01
        • 2016-11-17
        • 2011-10-24
        • 2011-08-22
        • 2016-10-07
        相关资源
        最近更新 更多