Swift 如何从完成块返回值?
我需要在dataTaskWithRequest的完成块中执行一些代码。此代码必须等待网络获取完成,然后构建返回UIView的UI。问题是我在void函数中返回值时遇到了编译器错误 代码如下所示Swift 如何从完成块返回值?,swift,Swift,我需要在dataTaskWithRequest的完成块中执行一些代码。此代码必须等待网络获取完成,然后构建返回UIView的UI。问题是我在void函数中返回值时遇到了编译器错误 代码如下所示 func mapView(mapView: GMSMapView!, markerInfoWindow marker: GMSMarker!) -> UIView! { var rating:Double? var id = Int(marker.userData["orgId"
func mapView(mapView: GMSMapView!, markerInfoWindow marker: GMSMarker!) -> UIView! {
var rating:Double?
var id = Int(marker.userData["orgId"] as! String)
let request = NSMutableURLRequest(URL: NSURL(string: urlToFetchFrom)!)
request.HTTPMethod = "POST"
let postString = "org_id=\(id!)"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
var json = JSON(data: data!)
rating = json["results"]["avg_stars"].doubleValue
self.window = NSBundle.mainBundle().loadNibNamed("infoWindow", owner: self, options: nil).first! as! infoWindow
self.window?.name.text = marker.title
self.window?.adress.text = marker.snippet
if rating != 0 {
self.window?.stars.image = UIImage(named: "\(self.showStars(rating!))")
self.window?.rating.text = String(rating!)
}
return self.window
}
task.resume()
}
如何修改代码,使其不会给我编译器错误?您不能从无效闭包返回,而不能从租约返回,因为完成处理程序可能在不久的将来的某个时间运行,在当前执行离开您的函数之后。为什么不能从完成处理程序中调用
resume()
函数?为什么需要返回窗口?