#ios #swift #core-location #ios14
#iOS #swift #расположение ядра #ios14
Вопрос:
Я использую этот код, чтобы проверить, есть ли у меня доступ к местоположению пользователя или нет
if CLLocationManager.locationServicesEnabled() {
switch CLLocationManager.authorizationStatus() {
case .restricted, .denied:
hasPermission = false
default:
hasPermission = true
}
} else {
print("Location services are not enabled")
}
}
И Xcode (12) кричит на меня с этим предупреждением:
'authorizationStatus()' was deprecated in iOS 14.0
Итак, какова замена?
Ответ №1:
Теперь это свойство CLLocationManager
, authorizationStatus
. Итак, создайте CLLocationManager
экземпляр:
let manager = CLLocationManager()
Затем вы можете получить доступ к свойству оттуда:
switch manager.authorizationStatus {
case .restricted, .denied:
...
default:
...
}
В iOS 14 есть несколько изменений, связанных с местоположением. Смотрите WWDC 2020 Что нового в местоположении.
Излишне говорить, что если вам также необходимо поддерживать версии iOS до 14, просто добавьте #available
проверку, например:
let authorizationStatus: CLAuthorizationStatus
if #available(iOS 14, *) {
authorizationStatus = manager.authorizationStatus
} else {
authorizationStatus = CLLocationManager.authorizationStatus()
}
switch authorizationStatus {
case .restricted, .denied:
...
default:
...
}
Комментарии:
1. Спасибо, но я получаю, что этот статический член ‘manager’ не может использоваться для экземпляра типа ‘CLLocationManager’
2. Ошибка в бета-версии Xcode, скорее всего, если я установлю цель на iOS 13, то оба примера будут работать с использованием CLLocation literate в качестве исходного плаката и с использованием let manager = CLLocationManager() как вы продемонстрировали, тогда статической ошибки участника не будет. Странно
3. Если вам необходимо одновременно поддерживать iOS 14 и более ранние версии, используйте
#available
check .
Ответ №2:
Версия Objective C:
В интерфейсе класса
@property (nonatomic, strong) CLLocationManager *locationManager;
В коде класса
- (id) init {
self = [super init];
if (self != nil) {
self.locationManager = [[CLLocationManager alloc]init];
}
return self;
}
-(CLLocation*)getLocation
{
CLAuthorizationStatus status = [self.locationManager authorizationStatus];
if (status == kCLAuthorizationStatusNotDetermined)
{
[self promptToEnableLocationServices];
return nil;
}
etc...