Firebase:实际使用的FirDatabaseQuery对象是什么?

时间:2017-09-28 15:51:16

标签: ios swift firebase firebase-realtime-database

我已经找到了数百万个关于如何使用查询....()方法获取FirDatabaseQuery对象(或者现在已经重命名为DatabaseQuery)的示例和教程。

但是,这些示例中没有一个继续显示您在获取查询后可以对查询执行的操作。 如果您使用其中一种查询方法获取数据的子集作为DatabaseQuery,您如何实际访问它所代表的数据对象集? 例如,如果你不能遍历查询结果,就像你可以迭代快照一样,那么实际使用的DatabaseQuery是什么呢?

1 个答案:

答案 0 :(得分:0)

我认为在docs中很容易找到答案。

我认为在该类的Android版本中,它的解释非常好:

  

The Query class (and its subclass, DatabaseReference) are used for reading data. Listeners are attached, and they will be triggered when the corresponding data changes.

我可以用我自己的语言解释它,并且更加实用:

您可以像DatabaseQuery一样使用DatabaseReference对象,只有observe个函数有效且没有用于操作值的方法,即{{1}等等,引用或与其他节点相关的任何方法,即父和子(setValue()等),都存在。

(我从文档中获取了代码,因此请您自由优化/引入您的编码风格)

这是您从child()获取数据的方式:

DatabaseReference

这就是您从var postRef: DatabaseReference! postRef = Database.database().reference().child("posts") refHandle = postRef.observe(DataEventType.value, with: { (snapshot) in let postDict = snapshot.value as? [String : AnyObject] ?? [:] // ... }) 获取数据的方式:

DatabaseQuery

如您所见,第二部分保持不变,正如我所提到的那样,在检索数据时您处理的// My top posts by number of stars let myTopPostsQuery = (ref.child("user- posts").child(getUid())).queryOrdered(byChild: "starCount") refHandle = myTopPostsQuery.observe(DataEventType.value, with: { (snapshot) in let postDict = snapshot.value as? [String : AnyObject] ?? [:] // ... }) 就像DatabaseQuery一样。但我必须同意你的观点,即 iOS 特别是 Swift 文档制作得不好,其他语言的解释更加清晰。