ios - 从 Firebase 检索信息时控制流如何工作?

标签 ios swift firebase firebase-realtime-database

var ergebnisBluetezeit = Set<String>()

let refBluetezeit = rootRef.child("Pflanzen").child("Eigenschaften").child("Blütezeit")
    refBluetezeit.child("Februar").observeSingleEvent(of: .value, with: { snapshot in
                    for plant in snapshot.children {
                        self.ergebnisBluetezeit.insert((plant as AnyObject).value)
                    }
                })
    print(ergebnisBluetezeit)

我想从我的 Firebase 数据库检索数据。检索过程确实可以工作,但以下内容让我感到困惑:打印的当前输出是一个空集,但是当我在其他地方使用 var ergebnisBluetezeit 时(例如设置一个按钮,哪个操作是打印 ergebnisBluetezeit),它被填充。当我将打印放入 for 循环中时,它也打印出正确的输出。 我似乎不明白这里的控制流程,所以我的问题: 我如何使用当前打印语句所在的集合? 感谢您的帮助。

最佳答案

这是异步调用的逻辑

print("1") // empty
refBluetezeit.child("Februar").observeSingleEvent(of: .value, with: { snapshot in     

 print("3") // empty
 for plant in snapshot.children {
         self.ergebnisBluetezeit.insert((plant as AnyObject).value)
  }
    print(ergebnisBluetezeit) // not empty
})

print("2") // empty

无论您在代码顺序中的哪个位置运行 print ,在请求完成之前该值都是空的,如上面的编号顺序 1 , 2 , 3 要知道它何时完成,您可以使用类似的补全

func getData(completion:@escaping() -> ()) {
    let refBluetezeit = rootRef.child("Pflanzen").child("Eigenschaften").child("Blütezeit")
    refBluetezeit.child("Februar").observeSingleEvent(of: .value, with: { snapshot in
        for plant in snapshot.children {
            self.ergebnisBluetezeit.insert((plant as AnyObject).value)
        }
        completion()
    })
}

然后打电话

getData {
   print(ergebnisBluetezeit)
}

关于ios - 从 Firebase 检索信息时控制流如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54890317/

相关文章:

ios - Worklight 6.1 - App Center Installer 应用程序未在设备上显示 iOS 应用程序

ios - 如何在 Swift 中显示 SDWebimage 背景颜色

javascript - 将 JSON 数据编辑为 Firebase 格式

ios - 后台检查网络连接并上传数据

xcode - 将文件移动到 Xcode 中的真实文件夹中

ios - SceneKit 在多个透明平面上延迟阴影

ios - View Controller 的设置委托(delegate)有问题吗?

javascript - 如何在 angularFire 0.5.0 和最新的 ng-grid 之间创建三向数据绑定(bind)?

android - 如何将 Admin SDK api 添加到 android 项目

ios - 录制的视频有时显示,有时不显示