2014-09-30 80 views
2

这段代码是用来回答这方面的问题:迅速完成处理程序语法

How to make an HTTP request in Swift?

let url = NSURL(string: "http://www.stackoverflow.com") 

let task = NSURLSession.sharedSession().dataTaskWithURL(url) {(data, response, error) in 
    println(NSString(data: data, encoding: NSUTF8StringEncoding)) 
} 

task.resume() 

dataTaskWithURL文档说以下内容:

func dataTaskWithURL(_ url: NSURL, 
    completionHandler completionHandler: ((NSData!, 
           NSURLResponse!, 
           NSError!) -> Void)?) -> NSURLSessionDataTask 

所以它出现在{(data .... }部分第一个代码块是完成处理程序。我来自一个Java背景的地方,这将表示,像这样:

dataTaskWithUrl(url, function(data, ....) { .... });

有人能解释为什么完成处理程序是不是在方法调用中的第二个参数?

回答

2

这是一个Trailing Closure

如果你需要一个封闭表达式传递给函数作为 函数的最后一个参数和封盖表现为长,它可以 是它写成一个尾随封闭有用代替。拖地的 封是写的 外(后)功能的括号调用它支持

+0

啊,这正是我一直在寻找一个闭合的表达。谢谢! – thatidiotguy 2014-09-30 18:33:00