在我们的代码中,我们调用一个应该从CLGeocoder返回当前设备位置地址的方法。但问题是,CLGeocoder异步执行请求,并在完成请求时调用completionHandler,因此存在“延迟”。
是否有一种方法来执行reverseGeocodeLocation并在方法中返回结果?因此,基本上,被调用的方法需要“等待”,直到CLGeo编码器的请求完成。
发布于 2018-01-09 07:02:32
func findGMSAddress(completion : @escaping (_ address : LocationModel)->()) {
let geoCoder = CLGeocoder()
let loca = CLLocation(latitude: self.location.latitude, longitude: self.location.longitude)
geoCoder.reverseGeocodeLocation(loca) { (placemarks, error) -> Void in
if error != nil {
print("Error getting location: \(String(describing: error))")
} else {
let placeArray = placemarks as [CLPlacemark]!
var placeMark: CLPlacemark!
placeMark = placeArray?[0]
self.location.name = placeMark.name ?? ""
self.location.adminArea = placeMark.administrativeArea ?? ""
self.location.locality = placeMark.locality ?? ""
self.location.thoroughFare = placeMark.thoroughfare ?? ""
completion(self.location)
}
}
}使用上述方法如下:
// show loader
self.findGMSAddress(completion: { (address) in
DispatchQueue.main.async {
// hide loader
// use address here
}
})https://stackoverflow.com/questions/48162125
复制相似问题