【问题标题】:confused with observing firebase database using value event type与使用值事件类型观察 Firebase 数据库相混淆
【发布时间】:2018-03-25 02:37:10
【问题描述】:

我是 iOS 开发的新手,我正在学习有关将数据读写到 firebase 的教程。我想从 Firebase 检索数据并用它填充 tableView。

在观察引用时使用 .value 数据事件类型从实时数据库中检索数据时,我感到很困惑。这是简化的代码

class Story
{
    var text = ""
    var numberOfLikes = 0
    var numberOfAngry = 0
    let ref: FIRDatabaseReference!

    init(snapshot: FIRDataSnapshot)
    {
        ref = snapshot.ref
        if let value = snapshot.value as? [String : Any] {
            text = value["text"] as! String
            numberOfLikes = value["numberOfLikes"] as! Int
            numberOfAngry = value["numberOfAngry"] as! Int
        } else {
            numberOfAngry = 0
            numberOfLikes = 0
        }
    }


}


class StoriesTableViewController: UITableViewController
{
    // MARK: - Properties
    var stories = [Story]()
    private let storiesRef = FIRDatabase.database().reference().child("stories")

    @IBOutlet weak var composeBarButtonItem: UIBarButtonItem!

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)



        storiesRef.observe(.value, with: { snapshot in
            self.stories.removeAll()

            for child in snapshot.children {
                let story = Story(snapshot: child as! FIRDataSnapshot)
                self.stories.append(story)
            }

            self.tableView.reloadData()
        })
    }

我的问题是……

  1. 我看过几乎相同的其他教程,只是编写简单的数据并用它填充表格视图,但其他教程只是使用 .childadded 作为事件类型。我不明白为什么在本教程中使用 .value 事件类型?因为它看起来更复杂。

  2. 为什么我们必须循环 snapshot.children ?当我们创建数据库引用时,snapshot.children 与 child 一样吗?

  3. 实际上,我对术语快照 (FIRDataSnapshot) 和参考 (FIRDatabasereference) 不太满意。有没有关于这个词的文章或视频解释?

很抱歉,如果我问了太多问题并且看起来很愚蠢,只是一个想要真正掌握此代码的新手。提前致谢

【问题讨论】:

    标签: ios swift firebase firebase-realtime-database


    【解决方案1】:
    1. 当您观察到.value 事件时,您的完成处理程序会被调用一次;带有所有子节点的快照。这允许您一次处理所有子节点,这可以方便地执行更新计数器或减少表视图更新次数等操作。

    2. 当您通过 .value 事件观察 Firebase 数据库中的项目列表时,可能会有多个子节点。所以快照包含这些结果的列表。即使只有一个子节点,快照也会包含一个子节点的列表。因此,您的完成处理程序需要遍历这些结果,您可以通过迭代 snapshot.children 来完成。

    3. FIRDataSnapshot/DataSnapshot 是一个 Firebase 对象,其中包含您在特定时间请求的数据的快照。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 2013-06-14
      • 2011-02-01
      相关资源
      最近更新 更多