gpt4 book ai didi

ios - 检查 key 是否存在 firebase 4 和 swift 4?

转载 作者:可可西里 更新时间:2023-10-31 23:57:24 24 4
gpt4 key购买 nike

如何检查 Firebase 中是否存在 key ?我看过这个链接 here ,但它适用于 Firebase 3,不适用于我的情况。因此,对于我的情况,我想检查用户名是否存在,如果存在,则不要注册用户,但如果不存在,则进行注册。我有一些类似的东西:

        let usersDB = Database.database().reference().child("Users")
var taken = false

usersDB.observeSingleEvent(of: .value, with: { (snapshot) in
if snapshot.hasChild(username) {
taken = true
self.errorLabel.text = "Username already taken."
}
})

if !taken {
// Email registration
Auth.auth().createUser(withEmail: email, password: password, completion: { (user, error) in
if error != nil {
print(error!.localizedDescription)
self.errorLabel.text = error!.localizedDescription
} else {
// Allows for username log in
usersDB.child(username).setValue(["email" : user?.email])
self.performSegue(withIdentifier: "goToGroups", sender: self)
}
})
}

observeSingleEvent 是之前类似帖子的解决方案,但它仅在我在此行 usersDB.child(username).setValue(["email": user?.email])它以前从未运行过。有没有其他方法可以做到这一点?

最佳答案

这看起来像是处理异步调用的问题。 if !taken 很可能会在从 observeSingleEvent 返回数据之前进行检查,因为它是异步的,因此其余代码将继续运行。一种选择是将 if !taken 移动到闭包中,如下所示:

    let usersDB = Database.database().reference().child("Users/\(username)")
var taken = false

usersDB.observeSingleEvent(of: .value, with: { (snapshot) in
if snapshot.exists() {
taken = true
self.errorLabel.text = "Username already taken."
}
if !taken {
// Email registration
Auth.auth().createUser(withEmail: email, password: password, completion: { (user, error) in
if error != nil {
print(error!.localizedDescription)
self.errorLabel.text = error!.localizedDescription
} else {
// Allows for username log in
usersDB.child(username).setValue(["email" : user?.email])
self.performSegue(withIdentifier: "goToGroups", sender: self)
}
})
}
})

关于ios - 检查 key 是否存在 firebase 4 和 swift 4?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49561629/

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