首页 > 解决方案 > 为什么这个函数不会返回用户名是否已经被使用?

问题描述

我的目标是确保不存在重复的用户名,因此在注册过程中,如果用户尝试使用其他用户拥有的用户名进行注册,则会出现错误消息。我是一名初学者,在消化 Firebase 文档时遇到了一些困难。此外,我似乎无法在网上找到适合我的直接答案。

我的代码是:

func checkIfUsernameExists() {
    let db = Firestore.firestore()
    let usernameSearch = db.collection("users")
    let username = usernameTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
    let query = usernameSearch.whereField("username", isEqualTo: username).getDocuments { (snapshot, error) in
        if let error = error {
            print("username is free")
        } else {
            for document in snapshot!.documents {
                print("username is taken")
            }
        }
    }


}

当我尝试使用我知道已经存在的用户名注册时,它确实成功打印了“用户名被占用”。但是,它没有告诉我“用户名何时免费”。

我正在使用 Cloud Firestore,并且我有一个“用户”集合,其中包含存储在单独的自动生成的 ID 文档下的“电子邮件”、“名字”、“姓氏”、“uid”和“用户名”字段。

任何帮助将不胜感激,我将不胜感激。

标签: swiftfirebasegoogle-cloud-firestore

解决方案


没有结果不是错误,所以它永远不会进入你的if let error = error {块。您需要明确检查是否snapshot有任何结果:

let query = usernameSearch.whereField("username", isEqualTo: username).getDocuments { (snapshot, error) in
    if let error = error {
        print("error: "+error)
    } else {
        if snapshot!.isEmpty {
            print("username is free")
        }
        else {
            print("username is taken")
        }
    }
}

推荐阅读