当我在网络开发章节阅读关于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个变量的任何定义。谁能帮我理解代码,提前谢谢。
答案 0 :(得分:0)
它被称为尾随闭包,如果该函数是最后一个参数,它是一种将函数传递给另一个函数的更简洁方法。相同的代码可以写成:
let sessionTask = NSURLSession.sharedSession()
let request = NSURLRequest()
sessionTask.dataTaskWithRequest(request, completionHandler: {(data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in
})
如果需要将闭包表达式作为函数的最终参数传递给函数,并且闭包表达式很长,则将其写为尾随闭包可能很有用。尾随闭包是一个闭包表达式,它写在它支持的函数调用的括号之外(和之后)
func aFunction(callback: (done: Bool) -> Void) {
let finished = true
callback(done: finished)
}
aFunction { (done) -> Void in
print("we are done \(done)")
}