有人知道处理程序(块)如何在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)!)
答案 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)
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>即可。我发现这种语法更容易读写,除非参数数量很大,否则代码将变得不可读。