仅使用firebase打印包含所有数据的数组

时间:2017-09-13 21:13:32

标签: ios arrays firebase

打印结果

["data1"]
["data1", "data2"]
["data1", "data2", "data3"] 
... 

想要的结果只是包含所有数据的最后一个打印数组,或者只是获取最后一个数组可以帮助我

["data1", "data2", "data3"] 

这是我用来从firebase获取数据的代码

 var dataArray = [String]()

     func fetchFirebaseData(){
            var datref: DatabaseReference!
            datref = Database.database().reference()

        datref.child("Data").observe(.childAdded, with: { (snapshot) in

            if let dictionary = snapshot.value as? [String: AnyObject]{
                let data = SpeisekarteInfos(dictionary: dictionary)
                data.setValuesForKeys(dictionary)

                self.dataArray.append(data.Name!)

                print(self.dataArray)
            }

        }, withCancel: nil)


    }

1 个答案:

答案 0 :(得分:0)

您正在观察.childAdded个事件,这些事件将被重复调用,一次针对数据库中的每个条目。我没有使用过FireBase,但基于一点谷歌搜索,听起来你应该反而观察.value事件,然后重构你的代码以期望所有这些事件。像这样:

 var dataArray: [String]?

 func fetchFirebaseData(){
        dataArray = []
        var datref: DatabaseReference!
        datref = Database.database().reference()

    datref.child("Data").observe(.value, with: { (snapshot) in
        for item in snapshot.children {
            if let dictionary = item as? [String: AnyObject]{
                let data = SpeisekarteInfos(dictionary: dictionary)
                data.setValuesForKeys(dictionary)

                self.dataArray.append(data.Name!)
            }
        }
        print(self.dataArray)

    }, withCancel: nil)
}

我正在对你从.value调用中获取的数据的格式做一些猜测,所以我不肯定上面的内容会起作用,但它至少应该指向正确的方向。

请注意,在我的版本中,我们使用.value观察者一次请求所有内容,然后循环遍历返回的所有子节点,将它们构建为数组,并且只有在它们全部返回后才打印该数组。

从我正在阅读的内容看来,每次更新数据库时,都会使用所有元素调用.value观察者。如果您的数据库是动态的,这将不是一个好方法。