如何在一个块中获取 Firebase 查询的所有结果

Posted

技术标签:

【中文标题】如何在一个块中获取 Firebase 查询的所有结果【英文标题】:How to get all results from a Firebase Query in one block 【发布时间】:2016-03-15 01:47:38 【问题描述】:

我很难处理 Firebase 查询结果。使用以下代码:

     ref.queryOrderedByChild("gender")
        .queryEqualToValue("female")
        .observeEventType(.ChildAdded, withBlock:  snapshot in
        print("result: \(snapshot) ")
     )

“结果”被打印 3 次。我希望所有结果的单个数组(类似于 Parse 上的查询)而不是单独打印 3 次。

这里的最终目标是将所有结果附加到一个数组中。但是,我不知道该怎么做,因为我无法知道有多少元素将从服务器返回。

我认为这里一定有一些我想念的简单的东西。

【问题讨论】:

【参考方案1】:

看来我错过了一些简单的事情。将事件类型从 .ChildAdded 更改为 .Value 可解决此问题。希望这对其他人有帮助...

 var resultArray:[AnyObject] = []
         ref.queryOrderedByChild("gender")
            .queryEqualToValue("female")
            .observeEventType(.Value, withBlock:  snapshot in

                for item in snapshot.children
                    resultArray.append(item)
                
                print("Results Array: \(resultArray)")
                print("Results Array Count: \(resultArray.count)")

         )

【讨论】:

.value 返回节点内的所有内容;如果那是 100 万个孩子,你会一次得到所有的孩子。另一方面,.childAdded 返回每个孩子,一次一个,还附加一个观察者,以便您的应用收到任何添加的新孩子的通知。

以上是关于如何在一个块中获取 Firebase 查询的所有结果的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 上的 Firebase 中获取嵌套键中的值

如何在 Firebase 云 Firestore 中查询一个字段然后按另一个字段排序?

Swift/iOS - Firebase 远程配置获取值永远不会完成

如何从大查询中获取多个查询的所有结果?

Flutter:如何在 [Firebase] 中使用 OR 条件获取流查询

无法以编程方式在我的导航栏中获取 UISearchController