urlSession.dataTaskWithRequest(request)

时间:2016-03-06 11:18:48

标签: swift rest get

当我在网络开发章节阅读关于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个变量的任何定义。谁能帮我理解代码,提前谢谢。

1 个答案:

答案 0 :(得分:0)

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

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)")
}