如何暂停执行我的函数直到执行完成块?

时间:2015-06-24 11:44:54

标签: ios swift

我的功能是这样的:

class function functionName(..args) ->NSData {

  var data : NSData?

  object1.operation(arg1,arg2, onComplete:{

    (error:NSError) -> Void in 

     /*My Code For Downloading data goes Goes Here*/
     data = downloadedData
   }) 

   return data

}

所以,在执行object1.operation之前发生了什么,我的代码进入了return data语句。

object1.operation方法完成之前,如何阻止我的函数的进一步执行?我尝试过dispatch_semaphonedispatch_groupdispatch_asyncdispatch_sync等等。他们都没有帮助过。

1 个答案:

答案 0 :(得分:0)

你可以这样做:

func url(absoluteURL: String, method: String, completion: ((nsData: NSData?) -> Void)!) {

        _rawURL  = NSURL(string: absoluteURL)
        _request = NSMutableURLRequest(URL: _rawURL)

        _request.HTTPMethod = method

        //Async Task
        var task: NSURLSessionDataTask = _session.dataTaskWithRequest(_request) {
            (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in

            if (error == nil) {
                var httpResponse: NSHTTPURLResponse = response as! NSHTTPURLResponse

                if (httpResponse.statusCode == 200) {

                    dispatch_async(dispatch_get_main_queue()) {
                        completion(nsData: data);
                    }
                }
            }

        }

        task.resume()
    }

这只是一个示例代码,但您可以在此处看到如何在函数签名上使用完成块....