Ios 以错误的顺序从Firestore存储下载URL

Ios 以错误的顺序从Firestore存储下载URL,ios,swift,google-cloud-firestore,storage,Ios,Swift,Google Cloud Firestore,Storage,我的Firebase存储有点问题。 在我的存储中,我有一些图片,如: "apple.jpg", "blueberry.jpg", "melon.jpg"... 在我的Swift代码中,我有一个包含水果名称的数组,如: ["Apple", "Blueberry", "Melon"] 在我的函数中,我循环我的Apple Name数组,如果我打印结果,我会得到以下结果: gs://myapp-5313d.appspot.com/sort/apple.jpg gs://myapp-5313d.app

我的Firebase存储有点问题。 在我的存储中,我有一些图片,如:

"apple.jpg", "blueberry.jpg", "melon.jpg"...
在我的Swift代码中,我有一个包含水果名称的数组,如:

["Apple", "Blueberry", "Melon"]
在我的函数中,我循环我的Apple Name数组,如果我打印结果,我会得到以下结果:

gs://myapp-5313d.appspot.com/sort/apple.jpg
gs://myapp-5313d.appspot.com/sort/blueberry.jpg
gs://myapp-5413d.appspot.com/sort/melon.jpg
但在我的fruitsRef.downloadURL方法中,我得到了随机排序的结果:

Optional(https://firebasestorage.googleapis.com/v0/b/myapp-5413d.appspot.com/o/sort%2Fblueberry.jpg?alt=media&token=5047d133-b37e-49d2-ae6c-59be5e7cafbf)

Optional(https://firebasestorage.googleapis.com/v0/b/myapp-5413d.appspot.com/o/sort%2Fmelon.jpg?alt=media&token=5047d133-b37e-49d2-ae6c-59be5e7cafbf)

Optional(https://firebasestorage.googleapis.com/v0/b/myapp-5413d.appspot.com/o/sort%2Fapple.jpg?alt=media&token=5047d133-b37e-49d2-ae6c-59be5e7cafbf)
func setUrlArray(排序:数组){
用于排序中的当前排序{
let storage=storage.storage()
让storageRef=storage.reference()
让fruitsRef=storageRef.child(“sort/”+currentSort.lowercased()。replacingOccurrences(of:,with:)+“.jpg”)
印刷品(水果)
FrootsRef.downloadURL{url,中出现错误
打印(url)
}
}
}
这怎么可能

亲切问候,,
doomsweb

这个问题与
变量的
downloadURL
函数的异步性质有关。迭代数组时,同步打印出对图像的引用(
print(foultsref)
),然后启动异步任务(
downloadURL

您已保证
for
循环将按特定顺序打印
结果ref
,因为您一次循环一个阵列-但是,您无法保证Firebase存储将响应您的网络请求的顺序


从服务器的角度来看,您基本上同时请求三种不同的资产(因为您的应用程序将非常快速地循环通过三个元素的数组),服务器将尽可能快地响应每个请求。因此,一旦这些资产中的任何一项返回到您的应用程序,就会点击
打印(url)

我现在用一个小技巧解决了这个问题。我的水果名称数组已按字母顺序排序。因此,我已经按照链接的字母顺序对数组进行了排序。现在顺序正确了

func setUrlArray(sorts: Array<String>) {
  for currentSort in sorts {
    let storage = Storage.storage()
    let storageRef = storage.reference()
    let fruitsRef = storageRef.child("sort/" + currentSort.lowercased().replacingOccurrences(of: " ", with: "") + ".jpg")
    print(fruitsRef)
    fruitsRef.downloadURL { url, error in
      print(url)
    }
  }
}