我的功能是这样的:
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_semaphone
,dispatch_group
,dispatch_async
,dispatch_sync
等等。他们都没有帮助过。
答案 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()
}
这只是一个示例代码,但您可以在此处看到如何在函数签名上使用完成块....