我的功能是这样的:
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
等 .. 它们都没有帮助。 p>
最佳答案
你可以这样做:
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()
}
这只是示例代码,但您可以在此处了解如何在函数签名上使用完成 block ......
关于ios - 如何暂停函数的执行,直到完成 block 被执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31025640/