我一直在开发一个照片存储应用,它可以从我的Firebase数据库获取图像链接,按顺序将它们存储在一个数组中,然后运行该数组,使用以下链接从相应的Firebase存储中获取图像数组。
但是,即使代码按顺序运行,函数getData也会无序地加载图像。我不知道为什么会发生这种情况,尽管我最初的想法是图像按大小顺序加载/加载时间最短。这是我的代码。
for link in Constants.officialLinksArray {
let storage = Storage.storage().reference(forURL: link)
// Download the data, assuming a max size of 1MB (you can change this as necessary)
storage.getData(maxSize: 10 * 1024 * 1024) { (data, error) -> Void in
// Create a UIImage, add it to the array
if let error = error {
print(error)
} else {
//print(self.imageCount)
let loadedImage = UIImage(data: data!)
self.photoArray.append(loadedImage!)
Constants.officialPhotoArray = self.photoArray
self.buttonArray.append(self.photoArray.count)
self.collectionView.reloadData()
//print(self.photoArray)
}
}
}
感谢任何帮助。谢谢!
答案 0 :(得分:0)
关于为什么你的负载没有考虑你的数组顺序,我认为(但你需要检查)getData
方法异步。
意思是,当你遍历你的链接数组时,你告诉你用给定的链接执行getData方法,但你的循环不会等到你的图像第一次加载到下一个链接。
为了说明我的目的,在你的else语句中(在你的加载完成的地方)打印一个打印,在你的闭包之外打印另一个打印但在你的循环结束时打印。我想你会看到一些关于代码执行的有趣行为。
总而言之,如果getData是异步的,基本上你得到的第一个图像是第一个加载的,而不是数组顺序中的第一个。由于计算期间网络的大小,质量,数据库的可用性,首先加载,原因很多。这就是为什么你的图像无序。