¿Cómo sé cuál es el sistema de medición predeterminado (imperial o métrico) en iOS?
¿Cómo sé cuál es el sistema de medida predeterminado (imperial o métrico) en iOS ?
¿Cómo obtengo esta preferencia de la configuración del dispositivo para saber qué mostrar en mi aplicación ?
Gracias
6 answers
El NSLocale
puede decirte:
NSLocale *locale = [NSLocale currentLocale];
BOOL isMetric = [[locale objectForKey:NSLocaleUsesMetricSystem] boolValue];
Solo tres países no utilizan el sistema métrico: Estados Unidos, Liberia y Myanmar. El último utiliza su propio sistema, los dos primeros utilizan Unidades Imperiales.
La documentación de las manzanas dice (énfasis mío):
NSLocaleUsesMetricSystem
La clave para el indicador que indica si la configuración regional utiliza el sistema métrico. El valor correspondiente es un objeto booleano NSNumber. Si el valor es NO, normalmente puede asumir la medición estadounidense unidades (por ejemplo, la milla estatutaria).
Disponible en iOS 2.0 y versiones posteriores.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-14 08:56:16
Aquí está una versión rápida
var locale = NSLocale.currentLocale()
let isMetric = locale.objectForKey(NSLocaleUsesMetricSystem) as! Bool
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-30 18:14:04
@DarkDust respuesta para swift3
//User region setting return
let locale = Locale.current //NSLocale.current
//Returns true if the locale uses the metric system
let isMetric = locale.usesMetricSystem
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-12 06:45:13
Para swift 3
let locale = NSLocale.current
let isMetric = locale.usesMetricSystem
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-14 14:28:35
Probablemente debería tener una configuración en su aplicación y dejar que sus usuarios elijan this esto es lo que hace Apple en la aplicación del clima.
Si desea elegir un valor predeterminado razonable, puede mirar la configuración regional. Si somos NOSOTROS, elige imperial de lo contrario elige métrica. Es una heurística, a veces estará mal, pero es solo un valor predeterminado que se puede cambiar.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-14 08:23:59
Como otros mencionados anteriormente, el Reino Unido utiliza una mezcla de unidades métricas e imperiales.
Recomendaría usar el nuevo MeassurementFormatter
introducido en iOS 10 que maneja la mayoría de estas discrepancias:
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
Para representar una distancia como una cadena en local, unidad natural, use:
let distanceInMeters: CLLocationDistance = 1000
let formatter = MeasurementFormatter()
formatter.string(from: Measurement(value: distanceInMeters, unit: UnitLength.meters)) // 0.621 mi
Documentación Oficial: https://developer.apple.com/documentation/foundation/measurementformatter
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-21 20:04:25