我已经找到了数百万个关于如何使用查询....()方法获取FirDatabaseQuery对象(或者现在已经重命名为DatabaseQuery)的示例和教程。
但是,这些示例中没有一个继续显示您在获取查询后可以对查询执行的操作。 如果您使用其中一种查询方法获取数据的子集作为DatabaseQuery,您如何实际访问它所代表的数据对象集? 例如,如果你不能遍历查询结果,就像你可以迭代快照一样,那么实际使用的DatabaseQuery是什么呢?
答案 0 :(得分:0)
我认为在docs中很容易找到答案。
我认为在该类的Android版本中,它的解释非常好:
我可以用我自己的语言解释它,并且更加实用:
您可以像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 文档制作得不好,其他语言的解释更加清晰。