我尝试使用Firebase编写一个函数,该函数允许知道是否使用了用户名。
for username in dict.values {
if username as? String == self.usernameText.text! {
appDelegate.visualReturnBottom(message: "Username already taken.", color: brandBlue, backgroundColor: UIColor.white)
return
}
}
问题是,如果不使用用户名,我想更改View Controller。为此,我必须等待循环结束,我真的不知道如何做到这一点。
我想添加这部分代码"如果循环结束......:"
let nextVC = self.storyboard?.instantiateViewController(withIdentifier: "InscriptionSecondVC") as! Inscription2TableViewController
self.navigationController?.pushViewController(nextVC, animated: true)
答案 0 :(得分:2)
如果您正在检查用户名匹配的值字典,则必须等到循环完成。没有其他方法可以执行该检查。由于您的代码目前已构建,因此应该可以使用。
for username in dict.values {
if username as? String == self.usernameText.text! {
appDelegate.visualReturnBottom(message: "Username already taken.", color: brandBlue, backgroundColor: UIColor.white)
return
}
}
// if the username is already taken, you will never reach this point.
let nextVC = self.storyboard?.instantiateViewController(withIdentifier: "InscriptionSecondVC") as! Inscription2TableViewController
self.navigationController?.pushViewController(nextVC, animated: true)
至于Dan's answer,我同意,你应该考虑重组数据。这只是您具体问题的答案。
答案 1 :(得分:1)
您可能希望充分利用Firebase的功能,并将数据库结构略有不同,以帮助您更有效地执行此操作。
您可能想尝试创建用户名节点并像这样构建它。当用户使用用户名注册时,您可以将其用户名添加为KEY,将VALUE添加为1.这样您就可以简单地检查用户名树是否包含特定用户名:
usernames:
- Bob: 1
- Dan: 1
- Billy: 1
然后,您可以简单地检查用户名树是否具有usernameText.text输出的子项,如下所示:
func handleCheckUsername() {
guard let username = self.usernameText.text else { return }
let reference = Database.database().reference()
reference.child("usernames").observeSingleEvent(of: .value, with: { (snapshot) in
if snapshot.hasChild(username) {
print("Username is taken.")
} else {
print("Username isn't taken.")
}
}, withCancel: nil)
}