如何在swift中使用NSURLConnection completionHandler

时间:2014-06-03 13:40:03

标签: block nsurlconnection swift

有人知道处理程序(块)如何在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)!)

4 个答案:

答案 0 :(得分:41)

像这样:

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 */
})

答案 1 :(得分:3)

您需要使用此代码:

NSURLConnection.sendAsynchronousRequest(request,queue:queue,completionHandler:{response,data,error in /* code goes here */ })

有关详情,请参阅this教程,或者查看How to parse a JSON file in swift?的答案。

答案 2 :(得分:3)

在较新版本的Swift中已弃用

sendAsynchronousRequest。转到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()

答案 3 :(得分:0)

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

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

这里我使用了速记参数名称。我将响应作为 $ 0 数据作为 $ 1 错误作为 $ 3'/ strong>即可。我发现这种语法更容易读写,除非参数数量很大,否则代码将变得不可读。