【问题标题】:Converting array of PFFile to UIImage in for loop returns empty array Swift在 for 循环中将 PFFile 数组转换为 UIImage 返回空数组 Swift
【发布时间】:2017-12-16 06:09:34
【问题描述】:

我正在尝试获取 PFFile 类型的数组并将其转换为 UIImage 类型的数组。我使用下面的代码,无论如何它总是返回一个空数组。任何帮助深表感谢。

userImagesPassed 是一个 PFFile 类型的数组。

func setUserImages() -> Array<UIImage> {
    var userImageArray = [UIImage]()
    for file2 in userImagesPassed {
        file2.getDataInBackground(block: { (imageData2, error) in
            if error != nil {
                userImageArray = []
            } else {
                userImageArray.append(UIImage(data: imageData2!)!)
            }
        })
    }
    return userImageArray
}

编辑:

如果我在 for 循环中打印 userImageArray,我会得到正确的输出(UIImage 类型的填充数组)。但是返回的值还是一个空数组。

【问题讨论】:

  • 提示:“异步”
  • 谢谢,我试过了,但可能做的不对。将 for 循环放在异步命令中是否正确?
  • 这是因为return userImageArray会在任何图片下载之前调用。
  • 感谢@DharmeshKheni,但我不确定如何解决这个问题,移动 return 语句会导致错误。
  • 帮助我了解setUserImages()在这里的用途。

标签: ios arrays swift loops uiimage


【解决方案1】:

首先,您不应该使用 return 语句用于异步函数。您应该使用完成处理程序来取回您的物品。这是我如何从 Parse 获取图像并附加到数组的示例。

Swift 4.0

    public func getImages(_ completion: @escaping (([UIImage]) -> Void)) {
    guard let tempImages = self.images else { return }
    var images = [UIImage]()
    for image in tempImages {
        image.getDataInBackground() {
            ( imageData, error) in
            guard error == nil else { return }
            guard let imageData = imageData else { return }
            guard let image = UIImage(data: imageData) else { return }
            images.append(image)
        }
    }
    completion(images) // Its returning your images
}

你可以像这样调用你的 getImages 函数;

let images = self.yourObjectArrayInClass[(indexPath).row]
    images.getImages() {
        (images) in
        DispatchQueue.main.async {
            // Do something with your images.
        }
    }

【讨论】:

  • 谢谢,有几个问题,因为我不太熟悉以这种方式使用闭包。在guard let tempImages = self.images else { return } 行中images 是我的PFFiles 数组吗?当您调用 getImages 函数时,您似乎应该传入 UIImages 数组。
  • guard let 语句用于从数据库中获取可选值。他们喜欢 if let 声明但更好的方法。你可以谷歌他们。我的回答解决了你的问题吗?如果确实如此。请接受答案。编码愉快。
  • 谢谢,我的图像已经从 Parse 下载并放入一个 PFFiles 数组中,我将如何将该数组传递到您的解决方案中?我已经尝试过,但因为它需要一个 UIImages 数组而出错?
猜你喜欢
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 2016-07-24
  • 2015-07-30
  • 2021-01-09
  • 2017-05-07
  • 1970-01-01
相关资源
最近更新 更多