Скачать образ с Kingfisher из Firebase Storage

В моем приложении я храню изображения в Firebase Storage, а также url в Cloud Firestore. Теперь, когда я пытаюсь получить это изображение, я использую 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 правильный, получить его, а затем сохранить в dataSourceArrayWithWishes как UIImage. Если нет, то просто сохраните пустой UIImage.

Однако, когда задано допустимое значение imageUrl, происходит сбой, поскольку imageView.image! не должно быть нулевым.

Может кто-нибудь помочь мне здесь?


person Chris    schedule 16.07.2020    source источник


Ответы (1)


Переместите его сюда внутри блока успеха

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

Этот imageView.kf.setImage(with: resource) { (result) in является асинхронным методом, означающим, что сбойная строка dataSourceArrayWithWishes[wishIDX].wishes.append(image: imageView.image!) запускается до того, как изображение будет получено из firebase, поэтому оно равно нулю.

person Sh_Khan    schedule 16.07.2020
comment
хорошо, это имеет смысл, спасибо за объясненный ответ! - person Chris; 16.07.2020