在 macOS 中获取用户偏好的温度设置
Get user preferred temperature setting in macOS
我正在尝试读取温度单位 (Celsius/Fahrenheit) 的用户设置系统首选项。
我试图使用 NSLocale 获取此数据,但我无法在其中找到任何温度设置的证据。
甚至可以读取此数据吗?
谢谢!
这有点 hack,但您可以在 macOS 10.12+ 和 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
这会在我的 playground 中输出 "F",默认为美国语言环境。但是更改您的区域设置或在设备上使用此代码,您将获得区域设置特定的温度单位 - 或者它的字符串。
官方API在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")
}
如果您想知道我是如何找到它的,我在终端中使用了 defaults
实用程序:
> defaults find temperature
Found 1 keys in domain 'Apple Global Domain': {
AppleTemperatureUnit = Fahrenheit;
}
Found 1 keys in domain 'com.apple.ncplugin.weather': {
WPUseMetricTemperatureUnits = 1;
}
我正在尝试读取温度单位 (Celsius/Fahrenheit) 的用户设置系统首选项。 我试图使用 NSLocale 获取此数据,但我无法在其中找到任何温度设置的证据。
甚至可以读取此数据吗?
谢谢!
这有点 hack,但您可以在 macOS 10.12+ 和 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
这会在我的 playground 中输出 "F",默认为美国语言环境。但是更改您的区域设置或在设备上使用此代码,您将获得区域设置特定的温度单位 - 或者它的字符串。
官方API在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")
}
如果您想知道我是如何找到它的,我在终端中使用了 defaults
实用程序:
> defaults find temperature
Found 1 keys in domain 'Apple Global Domain': {
AppleTemperatureUnit = Fahrenheit;
}
Found 1 keys in domain 'com.apple.ncplugin.weather': {
WPUseMetricTemperatureUnits = 1;
}