Block 如何将NSURLConnection completionHandler与swift一起使用

Block 如何将NSURLConnection completionHandler与swift一起使用,block,nsurlconnection,swift,Block,Nsurlconnection,Swift,有人知道swift中的处理程序(块)是如何工作的吗?我正在尝试运行这段代码,但找不到任何关于completionHandler正确语法的文档 let url:NSURL = NSURL(string:"some url") let request:NSURLRequest = NSURLRequest(URL:url) let queue:NSOperationQueue = NSOperationQueue() NSURLConnection.sendAsynchronousRequest(

有人知道swift中的处理程序(块)是如何工作的吗?我正在尝试运行这段代码,但找不到任何关于completionHandler正确语法的文档

let url:NSURL = NSURL(string:"some url")
let request:NSURLRequest = NSURLRequest(URL:url)
let queue:NSOperationQueue = NSOperationQueue()

NSURLConnection.sendAsynchronousRequest(request:request, queue:queue, completionHandler handler:((NSURLResponse!, NSData!, NSError!) -> Void)!)

您需要使用以下代码:

NSURLConnection.sendAsynchronousRequest(request,queue:queue,completionHandler:{response,data,error in /* code goes here */ })
有关更多信息,您可以参考教程,或查看的答案。

如下:

NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler:{ response, data, error in /* Your code */ })
或者更详细的变体

NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
    /* Your code */
})

您在这里要寻找的正确术语是闭包。Swift中的闭包类似于C和Objective-C中的块。除了Tomáš的答案外,还有另一个简短版本可以在此处使用完成处理程序:

NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler: {$0; $1; $2})

这里我使用了速记参数名。我访问的响应为$0,数据为$1,错误为$3。我发现这种语法更易于阅读和编写,除非参数数量很大,否则代码将变得不可读

sendAsynchronousRequest
在较新版本的Swift中已被弃用。移动到
dataTaskWithRequest
,幸运的是,它的使用方式几乎相同

let request:NSURLRequest = NSURLRequest(URL:NSURL(string:"http://YOUR_DESIRED_URL.com")!)
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: config)

let task = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in

});

task.resume()

有人能帮我理解如何从NSURLConnection.sendAsynchronousRequest中获取数据吗?completionHandler需要一个空返回值,因此我不确定如何从completionHandler中获取请求数据。谢谢例如,您可以访问调用类方法sendAsynchronousRequest的函数中的其他变量,例如,var lol:String!=“a”NSURLConnection.sendAsynchronousRequest(请求,队列:NSOperationQueue.mainQueue(),completionHandler:{(响应:NSURLResponse!,数据:NSData!,错误:NSError!)->在/*您的代码中无效*/lol=“b”})