【问题标题】:Firebase: what is a FirDatabaseQuery object actually used for?Firebase:FirDatabaseQuery 对象实际用于什么?
【发布时间】:2017-09-28 15:51:15
【问题描述】:

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

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

【问题讨论】:

    标签: ios swift firebase firebase-realtime-database


    【解决方案1】:

    我认为这个问题的答案很容易在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.

    我可以用我自己的话来解释,更实际的是这样的:

    您可以像使用DatabaseReference 一样使用DatabaseQuery 对象,但仅限于只有observe 函数起作用,并且没有用于操作值的方法,即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 就像处理 DatabaseQuery。但我必须同意你的观点,即 iOS 尤其是 Swift 文档制作得不是很好,其他语言的解释更清楚。

    【讨论】:

    • 该文档说明了操作的问题,它展示了如何实例化查询,但没有展示如何在实例化后从查询中获取数据。这就是被问到的问题,如何遍历和访问查询中的数据。
    • @Sausagedioxide 抱歉,首先没有提供足够好的解释,我刚刚更新了我的答案,为您提供了必要的示例,我认为这将解决您的问题。
    • 谢谢,所以还不让我奖励赏金,我不得不等一个小时。
    • 没问题。很高兴能为您提供帮助,我认为查看 Firebase 中的其他语言总是很好,可以提供更多见解,但也有点表明文档制作得不是很好。
    猜你喜欢
    • 1970-01-01
    • 2018-02-02
    • 2017-06-18
    • 2015-05-01
    • 2011-10-11
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多