从Firebase获取用户数据

时间:2020-06-27 16:02:28

标签: swift firebase google-cloud-firestore uilabel

我当前正在尝试显示当前登录用户的名称,但似乎无法显示它。谁能看到代码有什么问题吗?

控制台正在打印每个用户的名字,因此我在uuid中添加了名称,但现在却收到“使用未解析的标识符'querySnapshot'”错误

func getData() {
        let uuid = UUID().uuidString
        guard let currentUser = Auth.auth().currentUser else { return }
        let dbUsers = Firestore.firestore().collection("members").document(uuid)
        dbUsers.addSnapshotListener { snapshot, error in
        if error != nil {
                 print(error ?? "Couldn't update text field TextUser according to database")
            } else {
                for document in (querySnapshot?.documents)! {
                    if let Name = document.data()["firstName"] as? String {
                        print(Name)
                        var post = NameData(firstname: "")
                        post.firstname = Name

                        self.userName.append(post)
                        self.nameLabel.text = self.name
                    }
                }
                
                print(self.userName)
            }
        }
      }

2 个答案:

答案 0 :(得分:0)

错误消息告诉您您正在使用名为querySnapshot的变量,但从未定义它。

我怀疑您是想说for document in (snapshot?.documents)!

但是,您的snapshot不是QuerySnapshot对象,因为您仅在此处查询一个文档。因此,将没有documents属性,并且您将没有任何要实际迭代的内容。如果您只想查询单个文档,则应使用类似于documentation for reading a document中所看到的模式。

答案 1 :(得分:0)

您的查询有几个错误。

  1. 这是对Document的查询,而不是对集合的查询,因此您将只能检索一个文档,即带有您提供的uuid的文档。
  2. 查询snapShot的关闭开始处的占位符为snapshot,但在for loop中,您使用了querysnapShot,这是一个未解决的标识符,并且querySnapshot.documents不存在根据您的情况。

要从所有文档中检索所有数据,请使用以下代码替换您的代码

func getData() {
    let uuid = UUID().uuidString
    guard let currentUser = Auth.auth().currentUser else { return }
    let dbUsers = Firestore.firestore().collection("members")
    dbUsers.addSnapshotListener { snapshot, error in
    if error != nil {
             print(error ?? "Couldn't update text field TextUser according to database")
        } else {
            guard let Snapshot = snapshot else { return }
            for document in (Snapshot.documents) {
                if let Name = document.data()["firstName"] as? String {
                    print(Name)
                    var post = NameData(firstname: "")
                    post.firstname = Name

                    self.userName.append(post)
                    self.nameLabel.text = self.name
                }
            }
            
            print(self.userName)
        }
    }
  }