在Swift中完成for循环

时间:2018-01-22 16:22:48

标签: ios swift loops firebase swift3

我尝试使用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)

2 个答案:

答案 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)
}