[英]downloadURL from storage sequentially - Swift - Programmatically
我有一组 UIImages:
我将它加载到 Firebase 存储,并为每个图像下载它的 url:然后我将它添加到这样的数组中:
var imageUrlStringArray = [String]()
//imagesArray is ORDINATED correctly
for i in 0...imagesArray.count-1{
let imageID = "\(UUID().uuidString).jpg"
guard let imageData = imagesArray[i].jpegData(compressionQuality: 0.4) else { return }
storageThumbnailsRef.child(imageID).putData(imageData, metadata: nil) { (metadata, err) in
if let err = err{
print("impossible to add a thumbnail image: \(err.localizedDescription)")
return
}
storageThumbnailsRef.child(imageID).downloadURL { (url, err) in
if let err = err{
print("impossible to download image: \(err.localizedDescription)")
return
}
imageUrlStringArray.append(url!.absoluteString)
}
}
}
firestorePosts.addDocument(data: ["arrayImages": imageUrlStringArray])
初始数组imagesArray
已按照我的意愿正确排列,另一个数组imageUrlStringArray
第一个排序。
我知道这是因为函数downloadURL
是异步的,所以一旦下载了 imageURL,它就会被添加到数组中。
但是我如何仍然将imageUrlStringArray
排序为imagesArray
您可以使用字典而不是数组,使用for
循环的索引来保持图像 url 字符串的顺序:
var imageUrlStringArray = [Int: String]()
然后改变:
imageUrlStringArray.append(url!.absoluteString)
到以下,使用imagesArray
索引作为键:
imageUrlStringArray.updateValue(url!.absoluteString, forKey: i)
最后,当所有请求结束时,您可以在按索引对数组进行排序后,使用简单的map
调用将字典转换回数组:
let orderedImageUrlStringArray = imageUrlStringArray.sorted(by: { $0.key < $1.key }).map(\.value)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.