This question already has an answer here:
AlamoFire GET api request not working as expected
(1个答案)
5年前关闭。
以下代码无法正常运行。
完成处理程序中的Println可以正常工作,但是temPlacemark的值在代码末尾为nil。为什么会这样呢?我非常感谢你。
然后,您可以这样称呼它:
(1个答案)
5年前关闭。
以下代码无法正常运行。
func convertToStreet(location:CLLocationCoordinate2D) -> CLPlacemark {
var tempLocation = CLLocation(latitude: location.latitude, longitude: location.longitude)
var temPlacemark:CLPlacemark?
CLGeocoder().reverseGeocodeLocation(tempLocation, completionHandler: {(placemarks, error) in
temPlacemark = (placemarks[0] as CLPlacemark)
println(temPlacemark!.thoroughfare)
})
return temPlacemark!
}
完成处理程序中的Println可以正常工作,但是temPlacemark的值在代码末尾为nil。为什么会这样呢?我非常感谢你。
最佳答案
这是因为completionHandler
是异步调用的。为此,您应该在自定义函数中有一个回调块,以从CLGeocoder
获得值后返回该值。
像这样:
func convertToStreet(coordinate: CLLocationCoordinate2D, completionHandler: (placemark: CLPlacemark!, error: NSError!) -> Void) {
let tempLocation = CLLocation(latitude: coordinate.latitude, longitude: coordinate.longitude)
CLGeocoder().reverseGeocodeLocation(tempLocation) { placemarks, error in
completionHandler(placemark: placemarks?.first as CLPlacemark?, error: error)
}
}
然后,您可以这样称呼它:
convertToStreet(location.coordinate) { placemark, error in
if placemark != nil {
// use `placemark` here
println(placemark.thoroughfare)
} else {
println(error)
}
}
// but don't use `placemark` here
关于ios - 如何访问外部块变量? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28585188/
10-11 18:04