Я MapViewController
принимаю протокол CLLocationManagerDelegate
таким образом:
extension MapViewController:CLLocationManagerDelegate{
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let usrLocation:CLLocation = locations[0] as CLLocation
// readable
print("lat = \(usrLocation.coordinate.latitude)")
print("lon = \(usrLocation.coordinate.longitude)")
self.userLocation = usrLocation
locationManager.stopUpdatingLocation()
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error)
{
print("Error \(error)")
}
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
switch status {
case .restricted, .denied, .notDetermined:
// no issue here because I make a very generic request to a server
// AND I don't need user coordinates
break
case .authorizedWhenInUse, .authorizedAlways:
// here I need user coordinates because I need to request content to a server
// based on user coordinates but when I check for userLocation
// at first I find <+0.00000000,+0.00000000> +/- 0.00m (speed -1.00 mps / course -1.00
print("----------------")
print(userLocation)
print("----------------")
break
}
}
Мне нужны данные о местоположении пользователя в теле .authorizedWhenInUse/.autorizeAlways
дела, потому что мне нужно отправить текущий
Пользовательские координаты на сервере. Проблема в том, что когда они мне нужны, я сначала получаю местоположение пользователя, подобное этому:
<+0.00000000,+0.00000000> +/- 0.00m (speed -1.00 mps / course -1.00>
userLocation
является членом класса viewcontroller
, и его значение установлено в locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
. Должен ли я переместить запрос в эту функцию? И как я могу проверить статус пользователя в этом контексте? Я хочу отправлять запросы только тем пользователям, которые авторизовали приложение для получения своей позиции. Я надеюсь, что решение не таймер и несколько проверок, но любая помощь приветствуется: -)