我试图将一个CLLocation
传递给函数getPlacemarkFromLocation
,然后通过reverseGeocodeLocation
使用传递的CLLocation
来设置将返回的CLPlacemark?
。
我在reverseGeocodeLocation
中创建completionHandler
闭包时遇到了问题,它会引发编译器错误/崩溃:
在Swift中,根据文档,CLGeocodeCompletionHandler = (AnyObject[]!, NSError!) -> Void
,AnyObject[]!
应该包含像Objective-C版本一样的CLPlacemark
对象。
这是我的当前代码:
class func getPlacemarkFromLocation(location:CLLocation)->CLPlacemark?{
var g = CLGeocoder()
var p:CLPlacemark?
g.reverseGeocodeLocation(location, completionHandler: {
(placemarks, error) in
let pm = placemarks as? CLPlacemark[]
if (pm && pm?.count > 0){
p = placemarks[0] as? CLPlacemark
}
})
return p?
}
编辑:看起来错误与placemarks.count
有关,因为placemarks
没有像一个数组一样进行处理。现在它可以编译了,但是在尝试在completionHandler
中设置p
时,我得到了除了nil之外的任何东西。我已经检查了传递的CLLocation
,它们是有效的。
编辑2:在打印placemarks
后,我可以确认它返回数据。但是p
仍然返回nil。
self!.geocoder.reverseGeocodeLocation(location, completionHandler:{ [weak self] (placemarks: [AnyObject]!, error: NSError!) -> Void in // 在这里编写你的代码。 })
- pxpgraphics