ios - Swift:解释 NSURLSession.sharedSession().dataTaskWithURL 的语法语法

标签 ios swift networking

我是 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/

相关文章:

swift - FetchedResultsController 使用谓词排除集合中包含的结果

windows - 从 UNIX/LINUX 机器在 Windows 机器上执行命令

python - 连接WiFi python的最简单方法

node.js - 我想要一个跨网络工作的事件发射器

ios - 将我的 cordova 项目转移到 Xcode

iOS 使用 vImage - 加速将 QCAR YUV 转换为 RGB

ios - 警报不会按预期弹出

ios - 查找适合特定区域的 UILabel 的子字符串

ios - pod install 'PayPal-iOS-SDK' 失败,继续安装 CardIO (5.3.2)

swift - 即使文档说它是正确的,参数中的额外调用