Hago que MapViewController adopte el protocolo CLLocationManagerDelegate esta manera:
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 } } Necesito datos de ubicación del usuario en el cuerpo del caso .authorizedWhenInUse/.autorizeAlways porque necesito enviar las coordenadas actuales del usuario a un servidor. El problema es que cuando los necesito, al principio obtengo una ubicación de usuario como esta:
<+0.00000000,+0.00000000> +/- 0.00m (speed -1.00 mps / course -1.00> userLocation es miembro de la clase viewcontroller y su valor se establece en locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) . ¿Debo mover la solicitud a esta función? ¿Y cómo verifico el estado del usuario en ese contexto? Solo quiero hacer solicitudes para que los usuarios que autorizaron la aplicación recuperen su posición. Espero que la solución no sea un temporizador y varias comprobaciones, pero se agradece cualquier ayuda :-)
El hecho de que haya recibido .authorizedWhenInUse o .authorizedAlways no significa que ya haya iniciado los servicios de ubicación. Simplemente significa que ha sido autorizado. No debe intentar recuperar la ubicación del usuario en didChangeAuthorization .
Por lo tanto, debe llamar a startUpdatingLocation y mover su código que envía esta ubicación al servidor a su método didUpdateLocations .