swift - 为什么这个函数不会返回用户名是否已经被使用?
问题描述
我的目标是确保不存在重复的用户名,因此在注册过程中,如果用户尝试使用其他用户拥有的用户名进行注册,则会出现错误消息。我是一名初学者,在消化 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”和“用户名”字段。
任何帮助将不胜感激,我将不胜感激。
解决方案
没有结果不是错误,所以它永远不会进入你的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")
}
}
}
推荐阅读
- react-native - 有没有办法可以使用 Expo React Native 从图像中检测文本?
- r - 使用正确的 purrr::map 函数组合从多级列表创建 df
- c# - 当前不支持“System.String.Split”方法的这种重载
- reactjs - Graphql 订阅出错并出现错误:“订阅握手期间出错”
- html - org.thymeleaf.exceptions.TemplateProcessingException:评估 SpringEL 表达式的异常:“#request.userPrincipal.name”
- ssl - 为什么 nodeMCU tls mbed 库从 Pushbullet API 服务器收到错误 40(握手失败)?
- c# - EF6 代码优先 - 具有多个表的存储过程层次结构查询
- laravel-5 - Blade 不接受变量
- c# - 如何修复 C# 到 OracleDB 的连接代码中的“System.TypeInitializationException”错误
- c# - 从从 vscode 启动的程序中获取数据