首页 > 解决方案 > Swift:将数据从 Firestore 获取到数组中的问题

问题描述

从firestore获取数据的完成函数


struct User {
        let docID: String
        let firstName: String
    }
    
    var userArray = [User]()

// ...

//....


func getUserData(completion: @escaping ([User]) -> Void) {
              
               var result = [User]()
               
               guard let userID = Auth.auth().currentUser?.uid else {return}
               let db = Firestore.firestore()
               
              db.collection("users").whereField("uid", isEqualTo: userID)
               .getDocuments() { (querySnapshot, err) in
                   if let err = err {
                   print("Error getting documents: \(err)")
                   completion(result)
                   return
                 }
                   
                 else {
                    if let snapshot = querySnapshot {
                         for document in snapshot.documents {
                           let data = document.data()
                           let docid = data["docID"] as? String ?? ""
                           let firstName = data["firstName"] as? String ?? ""
                           let lastName = data["lastName"] as? String ?? ""
                           let email = data["email"] as? String ?? ""
                           let UData = User(docID: docid, firstName: firstName)
                            result.append(UData)
                            print(result)
                        }
                    }
                } //end ELSE
                   
                completion(result)
                   
               }
           
       }
       

在 viewWillAppear 中调用它

 
    override func viewWillAppear(_ animated: Bool) {
        
        getUserData{ (result) in
                   
            self.userArray.append(contentsOf: result)
            print(self.userArray)
            
            
        }
            
            
    } 

打印以下内容

[DaDoc.HomeViewController.User(docID: "avGhsRI1x0c", firstName: "Raul")]

问题

  1. 为什么“DaDoc.HomeViewController.User”这个被附加到数组中?我不能用“!”打开它 抛出错误“无法强制解开非可选类型 '[HomeViewController.User]' 的值”

  2. 我如何在此处访问密钥(docID,名字)[DaDoc.HomeViewController.User(docID:“avGhsRI1x0c”,名字:“Raul”)]

感谢任何帮助!

标签: swiftcompletion

解决方案


更新:

感谢@jawadAli 的建议-在课堂外移动结构有效

甚至认为我的结果仍然打印如下

[DaDoc.User(docID: "avGhsRI1x0c", firstName: "Raul")].

我能够访问键以将值添加到 tableView,如下所示:

cell.firstNameLabel?.text = userArray[indexPath.row].firstName

推荐阅读