检查用户名是否存在于Firebase DB中。
问题描述:
我想从用户通过@IBAction从用户名获得用户名。检查用户名是否存在于Firebase DB中。
我的目标是检查用户名是否已存在于Firebase中。如果它不存在,则注册它。如果它确实存在,我想做一些其他的事情。
这是我的代码。
@IBAction func enterUsername(){
let enteredUsername = usernameText!.text!
let namesRef = ref.childByAppendingPath("/usernames/\(enteredUsername)")
namesRef.observeEventType(.Value, withBlock: {
snap in
if (snap.value is NSNull){
let userNameAndUUID = ["Username" : enteredUsername, "UUID" : self.appDelegate.UUID]
namesRef.setValue(userNameAndUUID)
print("first block")
}else {
print("second block")
//do some other stuff
}
})
}
我遇到的问题是,如果用户名是唯一的(不存在),那么运行if/else的BOTH打印语句。 输出: 第一块 第二块
如果名称不是唯一的,它被适当地跳过的如果/否则如果部分。
为什么if/else语句的两个部分都在运行?
感谢您的任何帮助。
答
你看到的行为的确是有意的。由于您正在附加一个观察者,因此第一个if块正在运行一个唯一的名称,但在该块内,您正在设置一个值。
这将再次触发回调,这次将通过else块运行。
更改此代码的正确方法是使用observeSingleEventOfType
,以便您只读取一次值并且不要连续观察它。
当然,这是有道理的。谢谢。 – jakhamma