gpt4 book ai didi

ios - Firebase Swift 检查用户是否存在无法正常工作

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

我正在尝试检查数据库中是否存在用户,但无论用户是否存在,它总是显示“成功”。我不太了解 FireBase 文档,它们非常糟糕,任何人都可以帮助我并告诉我为什么每次都能成功吗?

        if nickTextField.text != "" {

let db = Database.database().reference()

var userExistsSwitch = false
db.child("Usernames").observe(.value, with: { (snapshot) in
if snapshot.hasChild("\(self.nickTextField.text!)") {
userExistsSwitch = true
print("Username already exists!")
}
})

db.child("Usernames").removeAllObservers()

if !userExistsSwitch {
print("Success!")
db.child("Usernames").child(self.nickTextField.text!).setValue(self.nickTextField.text!)
}

}

最佳答案

从 Firebase 加载数据是异步进行的。这意味着打印成功的代码会在数据实际加载之前运行。查看此情况的最简单方法是使用一些井位日志语句:

let db = Database.database().reference()
print("Before attaching observer");
db.child("Usernames").observe(.value, with: { (snapshot) in
print("Data has loaded");
})
print("After attaching observer");

当您运行此代码时,它会打印:

Before attaching observer

After attaching observer

Data has loaded

没有办法改变这种行为。这就是大多数现代网络的工作方式。

这意味着您必须将需要数据的任何代码放入完成处理程序中,或者从完成监听器中调用它。根据您的情况执行此操作的简单方法:

let db = Database.database().reference()

var userExistsSwitch = false
db.child("Usernames").observe(.value, with: { (snapshot) in
db.child("Usernames").removeAllObservers()
if snapshot.hasChild("\(self.nickTextField.text!)") {
userExistsSwitch = true
print("Username already exists!")
}
if !userExistsSwitch {
print("Success!")
db.child("Usernames").child(self.nickTextField.text!).setValue(self.nickTextField.text!)
}
})

关于ios - Firebase Swift 检查用户是否存在无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47542744/

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