我发现了 Alexandre Colucci 的这篇文章:http://blog.timac.org/?tag=nslocaletemperatureunit
首先,公开 NSLocaleTemperatureUnit NSLocaleKey:
FOUNDATION_EXPORT NSLocaleKey const NSLocaleTemperatureUnit;
然后用这个检查单位:
temperatureUnit = [[NSLocale currentLocale] objectForKey:NSLocaleTemperatureUnit]
或 Swift (2.3):
if let temperatureUnit = NSLocale.currentLocale().objectForKey(NSLocaleTemperatureUnit) {
...
}
它会返回一个字符串,要么是“摄氏度”,要么是“华氏度”。
但是有一个问题:它不向后兼容低于 10 的 iOS 版本。如果你在 iOS 9 或更早的设备上运行你的应用程序,你会在应用程序期间收到错误“dyld: Symbol not found: _NSLocaleTemperatureUnit”启动。
解决方案是对 NSLocaleTemperatureUnit 变量定义使用弱链接。像这样:
FOUNDATION_EXPORT NSLocaleKey const NSLocaleTemperatureUnit __attribute__((weak_import));
这将使应用程序通过 dyld 检查。但是现在你必须在使用 NSLocaleTemperatureUnit 之前检查操作系统版本,否则你的应用程序会崩溃并出现异常。
if #available(iOS 10,*) {
if let temperatureUnit = NSLocale.currentLocale().objectForKey(NSLocaleTemperatureUnit) {
...
}
}
编辑:
我在我的应用程序中尝试了它,但当我将它上传到 Testflight 时,Apple 拒绝了它。所以他们绝对不希望我们将设置用于我们自己的格式化程序类。我觉得这很烦人。