The meaning of urlSession.dataTaskWithRequest(request)



当我在网络开发章节中读到关于 swift 的书时,我遇到了一些我无法理解的代码。代码如下:

let sessionTask = urlSession.dataTaskWithRequest(request) {
            (data, response, error) in
            handler(response, data)
            } 

这个函数在 Swift 中的原型是:

public func dataTaskWithRequest(request: NSURLRequest, completionHandler: (NSData?, NSURLResponse?, NSError?) -> Void) -> NSURLSessionDataTask

如您所见,原型有 2 个参数,一个是请求,另一个是 completionHandler。但在上面的代码中,它也有一个参数。而且我也无法理解大括号中的代码,3 个变量数据、响应、错误从何而来?我找不到 3 个变量的任何定义。谁能帮我理解代码,提前谢谢。

它被称为尾随闭包,如果该函数是最后一个参数,则它是将函数传递给另一个函数的更简洁的方式。相同的代码可以写成:

let sessionTask = NSURLSession.sharedSession()
let request = NSURLRequest()
sessionTask.dataTaskWithRequest(request, completionHandler: {(data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in
})
如果需要将闭包表达式

作为函数的最后一个参数传递给函数,并且闭包表达式很长,则将其编写为尾随闭包会很有用。尾随闭包是写在它支持的函数调用的括号之外(和之后)的闭包表达式

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html#//apple_ref/doc/uid/TP40014097-CH11-ID102

func aFunction(callback: (done: Bool) -> Void) {
  let finished = true
  callback(done: finished)
}
aFunction { (done) -> Void in
  print("we are done (done)")
}

最新更新