首页 > 解决方案 > 在循环外访问数组

问题描述

我有一个数组,其中存储了一些不同的用户 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 的字典数据
也许我想为此复杂化.. 有人能帮帮我吗?

通常是否有一个很好的资源来学习范围以及在那种情况下应该如何访问数据?谢谢!

标签: arraysswiftdictionarygoogle-cloud-firestore

解决方案


最后让它使用以下代码:

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])")
                }
            }

推荐阅读