我是 iOS World 的新手。当我看到下载文件的方法时。我看到这段代码:
// create url
let imageURL = NSURL(string: Constants.CatURL)!
// create task
let task = NSURLSession.sharedSession().dataTaskWithURL(imageURL) {
(data, response, error) in print("task finished")
}
部分没看懂:
{
(data, response, error) in print("task finished")
}
data
response
error
对象来自哪里?他们是哪种类型?我熟悉一些语言,比如Java、C#和上面的结构很奇怪:方法调用之后是一个{}
代码块。我只是看到在 iOS 中有两种方法与上面有很大不同:
let task = NSURLSession.sharedSession().dataTaskWithURL(url: NSURL)
let task = NSURLSession.sharedSession().dataTaskWithURL(url: NSURL, completionHandler: (NSData?, NSURLResponse?, NSError?) -> Void)
谢谢:)
最佳答案
{ ... }
中的东西是一个匿名函数体。 (...) in
中的内容是传递给函数的参数名称。
关于“它们是哪种类型?”的问题部分真是个好问题。答案是 Swift 知道您引用的这个声明:
let task = NSURLSession.sharedSession().dataTaskWithURL(url: NSURL, completionHandler: (NSData?, NSURLResponse?, NSError?) -> Void)
所以 Swift 已经知道这三个参数的类型,因此可以选择省略类型(这里实际上已经省略了)。
您可能还会对省略标签 completionHandler:
感到困惑。这是合法的,因为此函数是最后 参数。在这种情况下,删除标签并将匿名函数体放在函数调用括号外(称为“尾随语法”)是合法的。
因此,您引用的代码实际上是实现dataTaskWithURL(_:completionHandler:)
的合法形式。
关于ios - Swift:解释 NSURLSession.sharedSession().dataTaskWithURL 的语法语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35278821/