swift - 在进行 POST 之前等待找到坐标

标签 swift wait

我正在使用 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 但没有用...?

最佳答案

有很多方法可以做到这一点。例如你调用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 <===
})

关于swift - 在进行 POST 之前等待找到坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50524024/

相关文章:

swift - 快速函数中的嵌套泛型

iOS 8 Swift - 是否需要将所有属性值设置为持久化?

java - 如何使用 Java 和 Spring 在 REST Web 服务中 wait()?

Swift 如何在退出函数之前等待回调完成?

c - wait(&status) 总是返回 0

java - 理解 wait()

swift - 我可以从 uiview 的初始化到它的 superview 创建约束吗

ios - UITableViewController 上的自定义弹出窗口可滑动 - 如何防止 - Swift

ios - 当枚举大小写具有相同的关联值时,避免重复的代码行?

android - 寻找一个快速简单的等待命令