All replies Apple Watch and your iPhone choose default units (metric or imperial) based on your region.
Most countries use the metric system which uses the measuring units such as meters and grams, and adds prefixes like kilo, milli, and centi to count orders of magnitude. In the United States, we use the older imperial system, where things are measured in feet, inches, and pounds.
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.
@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
here's a swift version
var locale = NSLocale.currentLocale()
let isMetric = locale.objectForKey(NSLocaleUsesMetricSystem) as! Bool
For swift 3
let locale = NSLocale.current
let isMetric = locale.usesMetricSystem
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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With