【发布时间】:2015-11-04 22:24:00
【问题描述】:
我的完成处理程序有问题。这是一个带有完成处理程序的函数,位于实用程序文件中:
func convertGeopointToCity(geopoint: PFGeoPoint, complete: (city: String, error: NSError?) -> Void) {
var city = ""
let latitude = geopoint.latitude
let longitude = geopoint.longitude
let location: CLLocation = CLLocation(latitude: latitude, longitude: longitude)
CLGeocoder().reverseGeocodeLocation(location, completionHandler: { placemarks, error in
if (error == nil) {
if let p = CLPlacemark?(placemarks![0]) {
if let city = p.locality {
city = " \(city)!"
print("Here's the city:\(city)")
complete(city: city, error: nil)
}
}
}
})
}
我在 ViewController 中调用
LocationUtility.instance.convertGeopointToCity(geopoint, complete: { result, error in
if error != nil {
print("error converting geopoint")
} else {
city = result as String
}
})
print("The city: \(city)")
输出清楚地表明该函数在运行块之前没有等待完成:
The city:
Here's the hood Toronto!
我该如何解决这个问题?
【问题讨论】:
-
按预期工作。一旦工作完成,就会调用完成处理程序。当工作完成时,常规控制流继续 - 在你的情况下,这意味着打印语句被执行。