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
然后再次将返回值转换为 Data
在 Swift 3 中加载图像时键入。我们将原始数据分配给两个版本中的变量 loadedImageData
。那为什么要类型转换?似乎 UIImage init()
方法在 Swift 3 中需要一个数据对象。但是对于 Swift 2 没有相同的转换。这是为什么?
感谢您的帮助。
最佳答案
迁移包括对这些方法签名的一些更改,即它们接受的类型。
在 Swift 2 中,NSData(contentsOfURL:)
和 UIImage(data:)
采用 NSURL
和 NSData
, 分别。
目前,它们已更改为 NSData(contentsOf:)
和 UIImage(data:)
分别接受 URL
(struct
) 和 Data
(而不是 NSData
);因此,强制转换是必要的,除非您从类型 URL
而不是 NSURL
构造您的 URL。
您也可以使用 Data(contentsOf: URL)
来避免转换。
关于ios - NSData 初始化?(contentsOf url : URL) migration from Swift 2 to Swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41291313/