Swift / Firebase: отменить загрузку изображения?

#swift #xcode #firebase #google-cloud-firestore

#swift #xcode #firebase #google-облако-firestore

Вопрос:

У меня есть следующий базовый код, реализованный для загрузки изображения из Firebase. Функция вызывается из ячейки UICollectionViewCell. Бывают случаи, когда пользователь может быстро прокручивать ячейку, и в этих случаях я хотел бы отменить задачу загрузки .getData, если она еще не вернулась. Есть ли способ отменить .getData?

 private func downloadImage(path: StorageReference, handler: @escaping (_ image: UIImage?) -> ()) {
        if let cachedImage = imageCache.object(forKey: path) {
            handler(cachedImage)
        } else {
            path.getData(maxSize: 27 * 1024 * 1024) { (data, error) in
                if let data = data, let image = UIImage(data: data) {
                    handler(image)
                    imageCache.setObject(image, forKey: path)
                } else {
                    handler(nil)
                    guard let error = error else { return }
                    print(error)
                }
            }
        }
    }
  

Ответ №1:

Если вы записываете операции хранения Firebase в виде свойств, вы можете вызывать для них методы, чтобы приостановить, возобновить или отменить их. Например:

 let download = path.getData(maxSize: 27 * 1024 * 1024) { (data, error) in
    if let data = data, let image = UIImage(data: data) {
        handler(image)
        imageCache.setObject(image, forKey: path)
    } else {
        handler(nil)
        guard let error = error else { return }
        print(error)
    }
}

download.pause()
download.resume()
download.cancel()
  

https://firebase.google.com/docs/storage/ios/download-files ?authuser=0#manage_downloads

Комментарии:

1. Это именно то, что я искал. Спасибо!