首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS Swift - CLGeocoder completionHandler块

iOS Swift - CLGeocoder completionHandler块
EN

Stack Overflow用户
提问于 2015-01-02 23:16:32
回答 1查看 3.4K关注 0票数 0

我正在尝试将一个位置(CLLocation)解析为一个字符串。

代码语言:javascript
复制
    func locationToString (currentLocation: CLLocation) -> String? {
    var whatToReturn: String?
    CLGeocoder().reverseGeocodeLocation(currentLocation, completionHandler: { (placemarks: [AnyObject]!, error: NSError!) in
        if error == nil && placemarks.count > 0 {
            let location = placemarks[0] as CLPlacemark
            whatToReturn = "\(location.locality) \(location.thoroughfare) \(location.subThoroughfare)"

        }
    })
    return whatToReturn
}

显然,whatToReturn总是返回null,因为completionHandler在后台运行。当completionHandler完成时,我很难理解如何更新字符串?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-02 23:51:19

如果要在textField中使用字符串(如注释中所示),请执行以下操作:

代码语言:javascript
复制
func getAndDisplayLocationStringForLocation(currentLocation: CLLocation) {
    CLGeocoder().reverseGeocodeLocation(currentLocation, completionHandler: { (placemarks: [AnyObject]!, error: NSError!) in
        if error == nil && placemarks.count > 0 {
            let location = placemarks[0] as CLPlacemark
            self.textField.text = "\(location.locality) \(location.thoroughfare) \(location.subThoroughfare)"

        }
    })
}

但是,如果您需要访问其他地方,则可能以arg的形式传递一个闭包:

代码语言:javascript
复制
func getAndDisplayLocationStringForLocation(currentLocation: CLLocation, withCompletion completion: (string: String?, error?, error: NSError?) -> ()) {
    CLGeocoder().reverseGeocodeLocation(currentLocation, completionHandler: { (placemarks: [AnyObject]!, error: NSError!) in
        if error == nil && placemarks.count > 0 {
            let location = placemarks[0] as CLPlacemark
            completion(string: "\(location.locality) \(location.thoroughfare) \(location.subThoroughfare)", error: nil)

        } else {
            completion(nil, error)
        }
    })
}

然后像这样打电话:

代码语言:javascript
复制
yourModel.getAndDisplayLocationStringForLocation(someLocation) { (string: String?, error: NSError?) -> () in
    if (error == nil) {
        self.textField.text = string
    }
}

您可能希望以不同的方式处理错误等。这应该足够让你开始工作了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27749854

复制
相关文章

相似问题

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