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

时间:2016-12-22 20:38:08

标签: 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)
                    }
                }
            }

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)
                    }
                }
            }

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:8)

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

在Swift 2中,NSData(contentsOfURL:)UIImage(data:)分别占用NSURLNSData

目前,他们已更改为NSData(contentsOf:)UIImage(data:),分别接受URLstruct)和Data(而不是{{1} }});因此,除非您从NSData类型而不是URL构建了网址,否则必须使用强制转型。

您可以使用NSURL来避免演员阵容。