Swift Completion Handler语法

时间:2014-09-30 18:15:48

标签: syntax swift

此代码用于回答此问题:

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, ....) { .... });

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

1 个答案:

答案 0 :(得分:2)

这是Trailing Closure

  

如果需要将闭包表达式传递给函数作为   函数的最终参数和闭包表达式很长,它可以   相反,将它写为尾随闭包很有用。落后   closure是一个封闭表达式,写在(和之后)之外   它支持的函数调用的括号