首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同步请求CLGeocoder.reverseGeocodeLocation

同步请求CLGeocoder.reverseGeocodeLocation
EN

Stack Overflow用户
提问于 2018-01-09 05:48:53
回答 1查看 672关注 0票数 0

在我们的代码中,我们调用一个应该从CLGeocoder返回当前设备位置地址的方法。但问题是,CLGeocoder异步执行请求,并在完成请求时调用completionHandler,因此存在“延迟”。

是否有一种方法来执行reverseGeocodeLocation并在方法中返回结果?因此,基本上,被调用的方法需要“等待”,直到CLGeo编码器的请求完成。

EN

回答 1

Stack Overflow用户

发布于 2018-01-09 07:02:32

代码语言:javascript
复制
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)
        }
    }

}

使用上述方法如下:

代码语言:javascript
复制
  // show loader
  self.findGMSAddress(completion: { (address) in
       DispatchQueue.main.async {
            // hide loader

            // use address here
      }
  })
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48162125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档