NSData init?(contentsOf url:URL)从Swift 2迁移到Swift 3

use*_*882 3 ios swift2 swift3

iOS/Swift新手.我正在尝试将项目(通过该NSData init()方法简单地从URL中提取内容)从Swift 2迁移到Swift 3.原始代码如下所示:

let loadedImageData = NSData(contentsOfURL: imageURL)
            dispatch_async(dispatch_get_main_queue()) {
                if imageURL == user.profileImageURL {
                    if let imageData = loadedImageData  {
                        self.profileImageView?.image = UIImage(data: imageData)
                    }
                }
            }
Run Code Online (Sandbox Code Playgroud)

Swift 3迁移:

 let loadedImageData = NSData(contentsOf: imageURL as URL)
            DispatchQueue.main.async {
                if imageURL == user.profileImageURL {
                    if let imageData = loadedImageData  {
                        self.profileImageView?.image = UIImage(data: imageData as Data)
                    }
                }
            }
Run Code Online (Sandbox Code Playgroud)

我不确定为什么我们需要将NSData返回值转换为a URL然后Data在Swift 3中加载图像时再次将该返回转换为类型.我们将原始数据分配给loadedImageData两个版本中的变量.为什么铸造呢?似乎该UIImage init()方法需要Swift 3中的数据对象.但是对于Swift 2,没有相同的转换.这是为什么?

谢谢您的帮助.

Unh*_*lig 8

迁移包括这些方法签名的一些变化,即它们接受的类型.

在夫特2,NSData(contentsOfURL:)UIImage(data:)NSURLNSData,分别.

目前,它们已被改为NSData(contentsOf:)并且UIImage(data:)分别接受URL(struct)和Data(而不是NSData); 因此,除非您从类型URL而不是构造URL,否则必须使用强制类型转换NSURL.

相反,你也可以使用它Data(contentsOf: URL)来避免演员表.