Ожидание, чтобы найти координаты, прежде чем сделать POST - PullRequest
0 голосов
/ 25 мая 2018

Я использую CLGeocoder, чтобы получить координаты адреса, введенного пользователем, который будет отправлен на сервер.Но эта функция, которая вызывается перед отправкой POST серверу, занимает столько времени, что сервер уже отправил информацию и ответил до того, как были найдены координаты.Как мне дождаться завершения этой функции и уведомить метод, вызвавший ее, что она может продолжаться?

func getCoordinates(address: String){

    let geoCoder = CLGeocoder()

         geoCoder.geocodeAddressString(address, completionHandler: { (placemarks, error) in

            let placemark = placemarks?.first
            self.lat = String(format: "%f",(placemark?.location?.coordinate.latitude)!)
            self.lon = String(format: "%f",(placemark?.location?.coordinate.longitude)!)

            print("Lat: \(self.lat), Lon: \(self.lon)")
        })

}

Я просматривал UNUserNotificationCenter и DispatchGroup, но безрезультатно ...?

1 Ответ

0 голосов
/ 25 мая 2018

Есть много способов сделать это.Например, вы вызываете Swift Closure после получения координат.

func getCoordinates(address: String, completionHandler:()->()){

    let geoCoder = CLGeocoder()

    geoCoder.geocodeAddressString(address, completionHandler: { (placemarks, error) in

        let placemark = placemarks?.first
        self.lat = String(format: "%f",(placemark?.location?.coordinate.latitude)!)
        self.lon = String(format: "%f",(placemark?.location?.coordinate.longitude)!)

        print("Lat: \(self.lat), Lon: \(self.lon)")
        completionHandler() //call Swift Closure after retrieving coordinates.
    })

}

//USAGE
getCoordinates(address: "address",
               completionHandler:{
                print("Lat: \(self.lat), Lon: \(self.lon)")
                //execute POST query here <===
})
...