2017-08-04 2 views
3

J'essaie de lire les préférences système définies par l'utilisateur pour l'unité de température (Celsius/Fahrenheit). J'essayais d'obtenir ces données en utilisant NSLocale, mais je ne trouve aucune preuve d'un réglage de température là-dedans.Obtenir le réglage de température préféré de l'utilisateur dans macOS

Est-il même possible de lire ces données?

Merci!

+0

Dupe: [Déterminer « La température de l'utilisateur Unité "réglage sur iOS 10 (Celsius/Fahrenheit)] (https://stackoverflow.com/q/39727075/2415822) – JAL

+1

Possible duplication de [Déterminer le paramètre" Unité de température "de l'utilisateur sur iOS 10 (Celsius/Fahrenheit)] (https : //stackoverflow.com/questions/39727075/determi ne-users-temperature-unit-setting-on-ios-10-celsius-fahrenheit) – CRD

+0

Aucun doublon car la question liée adresse iOS alors que cette question s'adresse à macOS –

Répondre

4

L'API officielle est documentée sous la Preferences Utilities:

let key = "AppleTemperatureUnit" as CFString 
let domain = "Apple Global Domain" as CFString 

if let unit = CFPreferencesCopyValue(key, domain, kCFPreferencesCurrentUser, kCFPreferencesAnyHost) as? String { 
    print(unit) 
} else { 
    print("Temperature unit not found") 
} 

Si vous vous demandez comment je l'ai trouvé, j'ai utilisé l'utilitaire defaults dans le terminal:

> defaults find temperature 
Found 1 keys in domain 'Apple Global Domain': { 
    AppleTemperatureUnit = Fahrenheit; 
} 
Found 1 keys in domain 'com.apple.ncplugin.weather': { 
    WPUseMetricTemperatureUnits = 1; 
} 
2

C'est un peu un hack, mais vous pouvez le faire de cette façon sur macOS 10.12+ et iOS 10+:

// Create a formatter. 
let formatter = MeasurementFormatter() 

// Create a dummy temperature, the unit doesn't matter because the formatter will localise it. 
let dummyTemp = Measurement(value: 0, unit: UnitTemperature.celsius) 

let unit = formatter.string(from: dummyTemp).characters.last // -> F 

Ce sorties « F » dans mon terrain de jeu qui par défaut les paramètres régionaux des États-Unis. Mais changez vos paramètres régionaux ou utilisez ce code sur un périphérique et vous obtiendrez l'unité de température spécifique aux paramètres régionaux - ou la chaîne correspondante de toute façon.