我正在尝试使用以下方法在swift 3中获取用户的区域代码:
Locale.current.regionCode
不幸的是regionCode是零,你知道为什么吗? 我应该怎么做才能获得它?
非常感谢。
答案 0 :(得分:5)
答案 1 :(得分:2)
对于在 SIMULATOR 中寻找解决方案的用户,请转到“设置>常规>语言和地区”并更改地区。
它对我和其他人都有用。
由于一个奇怪的未知原因,某些模拟器直到它至少改变一次才返回该区域。
我不知道它是否也可以在真实设备上运行,因为我在真实设备上没有这个问题。
答案 2 :(得分:1)
Many of the properties on Locale can return nil for various reasons on iOS (and Android).
You may also use objectForKey:NSLocaleCountryCode
to query the country code.
// code may be nil
NSString *code = [[NSLocale currentLocale] objectForKey:NSLocaleCountryCode];
It's a good idea to have a fallback logic to find countryCode with CoreTelephony.
CTCarrier *carrier = [[CTTelephonyNetworkInfo new] subscriberCellularProvider];
NSString *countryCode = carrier.isoCountryCode;
Or/And with reverse geocode:
// CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
__block CLLocation *location = [locations firstObject];
[[[CLGeocoder alloc] init] reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
if (!error && placemarks.count > 0) {
CLPlacemark *placemark = [placemarks firstObject];
// Use placemark.country;
// Use placemark.ISOCountryCode;
}
}
}
For instance, on Android version of corresponding region query for Locale, it's nil for many of the rooted devices.
答案 3 :(得分:0)