ios - NSData 初始化?(contentsOf url : URL) migration from Swift 2 to Swift 3

标签 ios swift swift3 swift2

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:) 采用 NSURLNSData , 分别。

目前,它们已更改为 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/

相关文章:

c - 在swift项目中使用c库

ios - 带有 UINavigationController 作为选项卡的 UITabViewController

iOS 8 UIImagePickerController 在缩放时崩溃

javascript - react native TypeError : Attempted to assign to readonly property

ios - 消除 Swift 中 UITableView 中空行的额外分隔线

ios - 如何从一个使用firebase设置的IOS应用程序读取/写入另一个firebase项目中包含的另一个firebase数据库? swift 3

ios - Xcode 7 的 gitignore 中应该包含什么

ios - 删除 UIPageViewController 中的循环 AVPlayer Observer

ios - 如何每 x 秒快速更新今天的小部件

SwiftUI AspectRatio 不适用于来自相机的图像