解析加载图像 Swift 3.0

Posted

技术标签:

【中文标题】解析加载图像 Swift 3.0【英文标题】:Parse load Images Swift 3.0 【发布时间】:2016-08-04 14:01:08 【问题描述】:

我正在运行我自己的解析服务器,一切正常,但是 我无法将 PFFile 转换为 UIImage,这是它向我抛出的错误:

无法将'(NSData?, NSError?) -> Void' 类型的值转换为预期的参数类型 PFDataResultBlock'

这是我使用的代码:

var imageFromParse = object.object(forKey: "ProfilePicture") as! PFFile!
                        imageFromParse!.getDataInBackgroundWithBlock( (imageData: NSData?, error: NSError?) -> Void in
                            var image: UIImage! = UIImage(data: imageData!)!
                        )

所有这些在 Swift 2.3 中都可以完美运行。 谢谢你的帮助。

【问题讨论】:

【参考方案1】:

斯威夫特 3.0:

if let imageFromParse = user.object(forKey: "ProfilePicture") as? PFFile 
    imageFromParse.getDataInBackground(block: 
        (data: Data?, error: Error?) in

        if error == nil 

        
    )


主要更新:

(数据:NSData?,错误:NSError?)在

已更新为:

(数据:数据?,错误:错误?)在

还有:

除非您另外指定,否则 Swift 3 要求所有标签,这意味着方法名称不再详细说明其参数。在实践中,这通常意味着方法名称的最后一部分被移动为第一个参数的名称。 了解更多信息:https://www.hackingwithswift.com/swift3

【讨论】:

我发现使用签名的缩短版本要容易得多:“(data, error) in”。【参考方案2】:

使用DataError 代替NSDataNSError

【讨论】:

【参考方案3】:

我在 swift 3.0 上做了一些测试,下面的代码对我有用:

    let query = PFQuery(className: "FileTest")

    query.findObjectsInBackgroundWithBlock 
        (objects: [PFObject]?, error: NSError?) -> Void in

        let firstObject = objects?.first as PFObject!
        let objectFile = firstObject.objectForKey("file") as! PFFile
        objectFile.getDataInBackgroundWithBlock( (imageData: NSData?, error: NSError?) -> Void in
            let image = UIImage(data: imageData!)
            if image != nil 
                self.imageOutlet.image = image
            

        )
    

在这段代码中,我首先获取所有 FileTest 集合,然后获取第一个对象(当然只是为了测试),然后读取文件。请注意,我使用 objectForKey 来获取存在于 test 列下的 PFFile。获得文件后,我调用 getDataInBackground 来获取数据,从数据创建 UIImage 并更新我的 imageView 一切都按预期工作.. 尝试运行此代码,看看它是否适合您。

【讨论】:

它甚至不允许我使用findObjectsInBackgroundWithBlock xcode 将其更改为findObjectsInBackground 真的很奇怪,您使用的是最新的 Parse SDK 吗? 是的,我通过 cocoapods 添加了解析 很奇怪,因为它已被重命名为 findObjectsInBackground(block:) 但我在文档中找不到任何内容来处理这个... 你能用 cocoapods 添加解析吗?我还能做的是将我的项目上传到 github,这样你就可以克隆它并测试它是否适合你..

以上是关于解析加载图像 Swift 3.0的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3.0 将图像写入目录

将图像从解析加载到集合视图 Swift

Swift 3.0 图像集

Swift - 从解析接收图像并显示它们的问题

来自照片库 swift 3.0 的风景图像

如何使用 Swift 3.0 播放附加到图像数组的声音?