arrays - 在循环外访问数组
问题描述
我有一个数组,其中存储了一些不同的用户 ID。每个 UserID 都与 Firestore 中的相应数据相关联。所以现在我想从 UserID 中获取所有 JSON 数据,并让它们可以在以后解码。因此,从每个用户获取的数据(以字典形式出现)必须可以单独访问。我用这种方式尝试过:
var fetchedIDs = ["ID1", "ID2", "ID3"]
var finalArray = [[String: Any]]()
for id in fetchedIDs{
let docRef = Firestore.firestore().collection("Data").document(id)
docRef.getDocument { (document, error) in
if let document = document, document.exists {
let myDict: [String: Any] = document.data() as! [String: Any]
finalArray.append(myDict)
}
}
}
}
但问题是 finalArray(如 finalArray[0])只能在 For-Loop 中访问。它应该可以在循环之外访问,并且看起来像这样:
finalArray[0] 应该有来自 ID1 的字典数据
finalArray[1] 应该有来自 ID2 的字典数据
也许我想为此复杂化.. 有人能帮帮我吗?
通常是否有一个很好的资源来学习范围以及在那种情况下应该如何访问数据?谢谢!
解决方案
最后让它使用以下代码:
var fetchedIDs = ["ID1", "ID2", "ID3"]
func loadData(com:@escaping( ([[String: Any]]) -> ())){
var myArray = [[String: Any]]()
for id in fetchedIDs{
let refLike = db.collection("Data").document(id)
refLike.getDocument { (document, error) in
if let err = error {
print("Error getting documents: \(err)")
} else {
let myDict: [String: Any] = document?.data() as! [String: Any]
myArray.append(myDict)
}
com(myArray)
}
}
}
loadData(){ arr in
if (arr.count == fetchedIDs.count){
print ("User 1 has the following data: \(arr[0])")
print ("User 2 has the following data: \(arr[1])")
}
}
推荐阅读
- arrays - 为什么元素数组没有在 sprintf 下打印,如下代码所示?
- regex - 用于 Semver 匹配的 GNU grep 正则表达式
- android-studio - 如何在 M1 Mac 上使用 Android 模拟器?
- css - 如何在 nb-user 标签内更改 Nebular 的样式?
- bash - 在系统上查找某些文件并在父目录 bash 中执行命令
- javascript - 如何解决VSC上的@json Blade指令红色下划线?
- julia - Documenter.jl:在@index 块中添加参数
- python - 如何在 AWS Lambda 中获取当前时间戳?
- pytorch - PyTorch CUDA 错误:遇到非法内存访问
- python - 使用 PyPDF2 拆分 PDF 会从图像中删除替代文本