【问题标题】:Swift: Issue getting data from Firestore into an arraySwift:将数据从 Firestore 获取到数组中的问题
【发布时间】:2020-08-10 15:36:54
【问题描述】:

从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", firstName: "Raul")]

任何帮助表示赞赏!

【问题讨论】:

  • 把你的结构带出课堂会解决你的问题
  • 检查一下,如果您需要进一步的帮助,请告诉我
  • @jawadAli - 感谢您的回复。仍然得到 [DaDoc.User(docID: "avGhsRI1x0c", firstName: "Raul")]... 也无法解包... 我应该将其移至单独的文件吗?
  • 什么是DaDoc
  • 是的,把它移到单独的文件中

标签: swift completion


【解决方案1】:

更新:

感谢@jawadAli 的建议 - 将结构移到课堂外工作

即使我的结果仍然打印如下

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    相关资源
    最近更新 更多