首页 > 解决方案 > 从 Firebase 存储使用 Kingfisher 下载图像

问题描述

在我的应用程序中,我将图像存储在Firebase Storage 以及Cloud Firestoreurl中。现在,当我尝试检索此图像时,我正在使用Kingfisher,但我认为我对Kingfisher的工作方式有误解。这是我的代码:

let imageView = UIImageView()
    imageView.image = UIImage()
    if let imageUrl = URL(string: imageUrlString) {
        let resource = ImageResource(downloadURL: imageUrl)
        imageView.kf.setImage(with: resource) { (result) in
            switch result {
            case .success(_):
                print("success")
            case .failure(_):
                print("fail")
            }
        }
    }
dataSourceArrayWithWishes[wishIDX].wishes.append(image: imageView.image!)

我想在这里做的是,如果imageUrl正确,请检索它,然后将其保存dataSourceArrayWithWishesUIImage. 如果没有,那么只需保存一个空的UIImage.

但是,当给出有效值时imageUrl,它会失败,因为imageView.image!不能为空。

有谁可以帮我离开这里吗?

标签: iosswiftgoogle-cloud-firestorefirebase-storagekingfisher

解决方案


将其移至成功块内

        case .success(_):
            print("success") 
           dataSourceArrayWithWishes[wishIDX].wishes.append(image: imageView.image!)
        case .failure(_):
            print("fail")
        }
    }
}

imageView.kf.setImage(with: resource) { (result) in是一种异步方法,这意味着崩溃的行在从 firebasedataSourceArrayWithWishes[wishIDX].wishes.append(image: imageView.image!)获取图像之前运行,因此它是 nil


推荐阅读