swift2 NSData初始化?(URL的内容:URL)从Swift 2迁移到Swift 3

blpfk2vs  于 2022-11-06  发布在  Swift
关注(0)|答案(1)|浏览(252)

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中的数据对象。然而,对于斯威夫特2来说,没有同样的铸造。为什么呢?
谢谢你的帮助。

9nvpjoqh

9nvpjoqh1#

迁移包括这些方法的签名中的一些更改,即它们接受的类型。
在Swift 2中,NSData(contentsOfURL:)UIImage(data:)分别取NSURLNSData
目前,它们已更改为NSData(contentsOf:)UIImage(data:),分别接受URLstruct)和Data(而不是NSData);因此,除非您从类型URL而不是NSURL构造URL,否则转换是必要的。
您也可以使用Data(contentsOf: URL)来避免转型。

相关问题