ios - 如何使用 Firebase 更改我的值

标签 ios swift firebase firebase-realtime-database

我的代码给了我一个无限循环,他永远不会进入 if 或 else,我很确定,因为 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
            }
        })

最佳答案

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

  1. 生成一个随机值
  2. 开始调用数据库以查看该值是否已存在
  3. 等待调用完成
  4. 如果该值尚不存在,请高兴
  5. 否则重新开始

这可以通过递归函数最轻松地完成:

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

关于ios - 如何使用 Firebase 更改我的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38030619/

相关文章:

ios - 激活 iPhone 相机操作使我的应用程序崩溃

ios - 在具有字典作为“值”的字典中追加和更新

swift - 使用 Swift 2.0 处理 CoreData 中的顺序错误的最佳实践

ios - queryEqualTo 被跳过

reactjs - 如何从扫描的二维码中检索数据?

ios - UITableView 内容大小何时使用行插入/删除动画更新

html - 当 iPhone 从纵向旋转到横向时,CSS 会自动调整图像以适应屏幕

ios - SwiftUI/iOS |在没有 NSNotification 的情况下获取键盘大小

ios - 我如何设置一个计时器,使我的节点可以在 Swift Xcode 中每两秒跳转一次?

node.js - 如何仅在更新字段时触发 firebase 云功能?