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来说,没有同样的铸造。为什么呢?
谢谢你的帮助。
1条答案
按热度按时间9nvpjoqh1#
迁移包括这些方法的签名中的一些更改,即它们接受的类型。
在Swift 2中,
NSData(contentsOfURL:)
和UIImage(data:)
分别取NSURL
和NSData
。目前,它们已更改为
NSData(contentsOf:)
和UIImage(data:)
,分别接受URL
(struct
)和Data
(而不是NSData
);因此,除非您从类型URL
而不是NSURL
构造URL,否则转换是必要的。您也可以使用
Data(contentsOf: URL)
来避免转型。