繁体   English   中英

按顺序从存储中下载 URL - Swift - 以编程方式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM