Block 如何将NSURLConnection completionHandler与swift一起使用
有人知道swift中的处理程序(块)是如何工作的吗?我正在尝试运行这段代码,但找不到任何关于completionHandler正确语法的文档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(
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”})