如何使用Firebase更改我的值

时间:2016-06-25 16:37:20

标签: ios swift firebase firebase-realtime-database

我的代码给了我一个他永远不会进入的无限循环,如果不是,我很确定因为firebase只获得异步函数。
我想检查一下" random_hexa"存在,并得到新的随机,直到我得到一个不存在于我的数据库

的值
while (bool_check_while_exist == false)
    {
        ref.child("Salons").child(random_hexa).observeSingleEventOfType(.Value, withBlock: { (snapshot) in
            if (snapshot.exists())
            {
                random_hexa = self.randomAlphaNumericString(5)
            }
            else
            {
                bool_check_while_exist = true
            }
        })

1 个答案:

答案 0 :(得分:1)

您正在运行本地while循环,该循环不会处理Firebase数据库(以及大多数现代互联网)的异步性质。正确的流程是:

  1. 生成随机值
  2. 开始调用数据库以查看该值是否已存在
  3. 等待该电话完成
  4. 如果该值尚未存在,请高兴
  5. 别重新开始
  6. 这可以通过递归函数轻松完成:

    func findUniqueNumber(ref: FIRDatabaseReference, withBlock: (value: Int) -> ()) {
        let random_number = Int(arc4random_uniform(6) + 1)
        ref.child(String(random_number)).observeSingleEventOfType(.Value, withBlock: { (snapshot) in
            if (snapshot.exists())
            {
                print("Rejected \(random_number)")
                self.findUniqueNumber(ref, withBlock: withBlock)
            }
            else
            {
                withBlock(value: random_number)
            }
        })
    }
    

    然后你称之为:

    findUniqueNumber(ref, withBlock: { value in
        print(value)
    })