Firebase下载任务队列Swift

时间:2017-09-08 19:24:43

标签: ios swift firebase uiviewcontroller firebase-storage

我目前正在使用以下代码从Firebase存储中下载图像文件以获取UICollectionView中的缩略图。当我点击其中一个缩略图时,该应用会转移到另一个UIViewController然后下载更多Firebase存储中的图像。 目前,应用程序在下载UIViewController中的下一个图像之前等待所有缩略图完成下载。是否可以在UIViewController中增加新图像的优先级,或者取消所有其他下载以立即启动新图像?

var imageRef = storageRef.child("Thumbnails/\(itemID).jpg")
imageRef.getData(maxSize: 10 * 1024 * 1024) { data, error 
    if let error = error {
        // Uh-oh, an error occurred!
        print("Error: \(error.localizedDescription)")
     } else {
        let image = UIImage(data: data!)
        self.newsNameArray.append(name)
        self.newsImageArray.append(image!)
        self.newsBarCollectionView?.reloadData()                        
      }
}

谢谢

1 个答案:

答案 0 :(得分:1)

您可以像这样获得对StorageDownloadTask的引用:

var allTasks: [StorageDownloadTask] = []

var imageRef = storageRef.child("Thumbnails/\(itemID).jpg")
let downloadTask = imageRef.getData(maxSize: 10 * 1024 * 1024) { data, error 
    if let error = error {
        // Uh-oh, an error occurred!
        print("Error: \(error.localizedDescription)")
     } else {
        let image = UIImage(data: data!)
        self.newsNameArray.append(name)
        self.newsImageArray.append(image!)
        self.newsBarCollectionView?.reloadData()                        
      }
}

将downloadTasks存储在一个数组中,并在下载新图像之前取消所有任务:

allTasks.append(downloadTask)

...

for task in allTasks {
    task.cancel()
}