ios - 如何暂停函数的执行,直到完成 block 被执行?

标签 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 等 .. 它们都没有帮助。 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/

相关文章:

ios - UITableView 中的单元格队列大小

ios - 在 iOS 中上传应用程序时出现问题

iphone - 如果 NSTimer 的 repeats 属性等于 YES,我应该释放它吗?

iphone - 使用非零原点初始化 UIImageView 的更好方法

ios - Swift2 - 如何确定抛出错误的类型?

ios - WKWebView - 如何获取我们刚刚触摸的输入类型的属性

ios - 未调用自定义委托(delegate)方法

swift - 无法在 DatePicker Swift 中设置日期

swift - 使用 Swift 生成随机数

ios - 为什么 UICollectionViewCell 的导出为零?