How do I know which is the default measure system (imperial or metric) on iOS?

前端 未结 6 1446
旧时难觅i
旧时难觅i 2020-12-07 22:15

How do I know which is the default measure system (imperial or metric) on iOS ?

How do I get this preference from the device settings, so I know what to display in m

相关标签:
6条回答
  • 2020-12-07 22:45

    As others mentioned before, the UK uses a mix of metric and imperial units.

    I would recommend using the new MeassurementFormatter introduced in iOS 10 which handles most of these discrepancies:

    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
    

    To render a distance as a string in local, natural unit, use:

    let distanceInMeters: CLLocationDistance = 1000
    let formatter = MeasurementFormatter()
    formatter.string(from: Measurement(value: distanceInMeters, unit: UnitLength.meters)) // 0.621 mi
    

    Official documentation: https://developer.apple.com/documentation/foundation/measurementformatter

    0 讨论(0)
  • 2020-12-07 22:56

    The NSLocale can tell you:

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

    Only three countries do not use the metric system: the US, Liberia and Myanmar. The later uses its own system, the former two use Imperial Units.

    Apples documentation says (emphasis mine):

    NSLocaleUsesMetricSystem

    The key for the flag that indicates whether the locale uses the metric system. The corresponding value is a Boolean NSNumber object. If the value is NO, you can typically assume American measurement units (for example, the statute mile).

    Available in iOS 2.0 and later.

    0 讨论(0)
  • 2020-12-07 22:59

    @DarkDust answer for swift3

    //User region setting return
    let locale = Locale.current //NSLocale.current
    
    //Returns true if the locale uses the metric system 
    let isMetric = locale.usesMetricSystem
    
    0 讨论(0)
  • 2020-12-07 23:01

    here's a swift version

    var locale = NSLocale.currentLocale()
    let isMetric = locale.objectForKey(NSLocaleUsesMetricSystem) as! Bool
    
    0 讨论(0)
  • 2020-12-07 23:03

    For swift 3

        let locale = NSLocale.current
        let isMetric = locale.usesMetricSystem
    
    0 讨论(0)
  • 2020-12-07 23:06

    You should probably just have a setting in your app and let your users choose -- this is what Apple does in the Weather app.

    If you want to choose a sensible default you could look at the locale. If it's US, pick imperial otherwise choose metric. It is a heuristic, it will be wrong sometimes, but it's just a default that can be changed.

    0 讨论(0)
提交回复
热议问题