Swift 如何从完成块返回值?

Swift 如何从完成块返回值?,swift,Swift,我需要在dataTaskWithRequest的完成块中执行一些代码。此代码必须等待网络获取完成,然后构建返回UIView的UI。问题是我在void函数中返回值时遇到了编译器错误 代码如下所示 func mapView(mapView: GMSMapView!, markerInfoWindow marker: GMSMarker!) -> UIView! { var rating:Double? var id = Int(marker.userData["orgId"

我需要在dataTaskWithRequest的完成块中执行一些代码。此代码必须等待网络获取完成,然后构建返回UIView的UI。问题是我在void函数中返回值时遇到了编译器错误

代码如下所示

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()
函数?

为什么需要返回窗口?