首页 > 解决方案 > 从 Firebase 获取用户数据

问题描述

我目前正在尝试显示当前登录的用户的名称,但我似乎无法让它显示名称。任何人都可以看到代码有什么问题吗?

控制台正在打印每个用户的名字,所以我在 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)
            }
        }
      }

标签: swiftfirebasegoogle-cloud-firestoreuilabel

解决方案


您的查询有几个错误。

  1. 这是对文档的查询,而不是集合,因此您将只能检索一个文档,即uuid您提供的文档。
  2. 查询 snapShot 的关闭开始的占位符是snapshotbut in 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)
        }
    }
  }

推荐阅读