Код, который вы предоставили, не соответствует утверждению в вашем вопросе, но я думаю, что вижу проблему в коде.Согласно документам Apple: Startupdatinglocation
location.startUpdatingLocation()
Асинхронная функция, для получения которой требуется несколько секунд.Функция немедленно вернется, но обратный вызов делегата будет вызван, когда система получит местоположение GPS (через несколько секунд, асинхронно).Ваш код выше вызывает startUpdatingLocation()
и сразу ожидает, что значение будет присутствовать (синхронно, чего никогда не будет).Ваш код должен быть больше похож на:
func locationManagerConfiguration(){
location.requestAlwaysAuthorization()
location.requestWhenInUseAuthorization()
if CLLocationManager.locationServicesEnabled(){
location.delegate = self
location.desiredAccuracy = kCLLocationAccuracyBest
location.startUpdatingLocation()
}
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
// TODO: Check the array is not empty
let sourceCoordinates = locations[0]
let sourcePlacemark = MKPlacemark(coordinate: sourceCoordinates!)
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("Location error: \(error)")
}