gpt4 book ai didi

ios - Firestore/Swift 4 : Check username exists?

转载 作者:行者123 更新时间:2023-11-30 11:20:20 26 4
gpt4 key购买 nike

我试图了解以下代码可能出问题的地方。我试图寻找一种方法来检查 users 集合是否在 username 字段中的其中一个文档中包含字符串。

结构看起来像这样

#users(collection)
#userID(document)
#name:String
#email:String
#username:String
#userID(document)
#name:String
#email:String
#username:String

我想要检查的是,在users内以及在任何文档内,该字符串是否存在于username字段中。找到了这个问题的可能解决方案(除其他外)here通过调用函数来查询用户名。

我在扩展中创建了该函数:

extension UITextField {

func checkUsername(username: String, completion: @escaping(Bool) -> Void) {
let usernameRef = Database.database().reference()
usernameRef.child("users").queryOrdered(byChild: "username").queryEqual(toValue: username).observeSingleEvent(of: DataEventType.value, with: { (snapshot: DataSnapshot) in
if snapshot.exists() {
completion(true)
}
else {
completion(false)
}
})
}

}

并在 textFieldDidEndEditing 中的文本字段上调用它,以便它可以对尝试声明用户名的用户执行检查。

func textFieldDidEndEditing(_ textField: UITextField) {

if activeField == usernameField {
textField.checkUsername(username: usernameField.text!) { isExist in
if isExist {
print("Username exists")
} else {
print("Username does not exist")
}
}
}

}

但是,即使用户名确实存在,这始终会向控制台返回“用户名不存在”

数据库中当前有 1 个名为 test 的用户名,因此尝试输入 test 应返回 'Username contains',输入 testtwo 应返回返回“用户名不存在”

我在这里可能缺少什么?我假设它没有正确查询数据库?

最佳答案

感谢 Frank 指出我正在调用实时数据库而不是 Firestore。更新了我的代码,以在检查文档中存储在 'username' 中的任何内容时返回 truefalse 值,并认为我会分享我更新的代码,如果其他人正在尝试检查其 Firestore 数据库中的'usernames'

在 UITextField 上创建一个扩展,当我需要检查用户名是否可用时调用该扩展:

func checkUsername(field: String, completion: @escaping (Bool) -> Void) {
let collectionRef = db.collection("users")
collectionRef.whereField("username", isEqualTo: field).getDocuments { (snapshot, err) in
if let err = err {
print("Error getting document: \(err)")
} else if (snapshot?.isEmpty)! {
completion(false)
} else {
for document in (snapshot?.documents)! {
if document.data()["username"] != nil {
completion(true)
}
}
}
}
}

然后在UITextField textDidEndEditing上,我调用该函数是事件字段是用户名字段:

func textFieldDidEndEditing(_ textField: UITextField) {

if activeField == usernameField {
if textField.text?.isEmpty == false {
textField.checkUsername(field: textField.text!) { (success) in
if success == true {
print("Username is taken")
// Perform some action
} else {
print("Username is not taken")
// Perform some action
}
}
}
}

}

如果我尝试输入任何文档用户名字段中存在的用户名,或者“用户名不存在”,则返回“用户名已被采用”如果没有找到任何内容,则采取“”。

如果有人有任何改进代码的反馈或任何问题,请告诉我。我会很高兴更新以供引用。 :)

关于ios - Firestore/Swift 4 : Check username exists?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51333982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com