Swift 无法将所有firebase数据显示到折线图

Swift 无法将所有firebase数据显示到折线图,swift,firebase,firebase-realtime-database,charts,Swift,Firebase,Firebase Realtime Database,Charts,我试图在折线图中显示我的firebase数据,但它只显示数据库中的一个数据,我想显示数据库中的所有数据。我只是个新手,所以如果有人能帮我,那就太好了 let ref = Database.database().reference().child("WeightTracker") ref.child("\(currentUser)").queryOrderedByKey().observeSingleEvent(of: .value) { (snapshot) in for rest

我试图在折线图中显示我的firebase数据,但它只显示数据库中的一个数据,我想显示数据库中的所有数据。我只是个新手,所以如果有人能帮我,那就太好了

let ref = Database.database().reference().child("WeightTracker")

ref.child("\(currentUser)").queryOrderedByKey().observeSingleEvent(of: .value) { (snapshot) in

    for rest in snapshot.children.allObjects as! [DataSnapshot] {

        guard let restDict = rest.value as? [String: Any] else { continue }
        let weight = restDict["weight"] as? String
        print(weight as Any)
        let date = restDict["date"] as? String
        print(date as Any)

        var xAxisValues = [""]
        var yAxisValues = [0.0]
        let total = Int(Double(weight!)!) * Int(2.20)
        xAxisValues.append(date!)
        yAxisValues.append(Double(total))
        let formatter = WTRandomVC(lineChart: self.lineChartsView, xArray: xAxisValues , yArray: yAxisValues)
        self.lineChartsView?.data?.setValueFormatter(formatter)
        continue
     }

 }

代码循环处理从数据库获得的结果,然后为每个单独的项目创建一个新的
格式化程序
,并将其设置到图表中。这意味着一旦代码完成,图表将只显示来自数据库的最后一个结果。要显示所有结果,您需要将数据收集到单个
格式化程序中,然后在聊天室中显示

代码应该如下所示:

let ref = Database.database().reference().child("WeightTracker")

ref.child("\(currentUser)").queryOrderedByKey().observeSingleEvent(of: .value) { (snapshot) in

    var xAxisValues = [""]
    var yAxisValues = [0.0]

    for rest in snapshot.children.allObjects as! [DataSnapshot] {

        guard let restDict = rest.value as? [String: Any] else { continue }
        let weight = restDict["weight"] as? String
        let date = restDict["date"] as? String

        let total = Int(Double(weight!)!) * Int(2.20)
        xAxisValues.append(date!)
        yAxisValues.append(Double(total))
     }
    let formatter = WTRandomVC(lineChart: self.lineChartsView, xArray: xAxisValues , yArray: yAxisValues)
    self.lineChartsView?.data?.setValueFormatter(formatter)

 }

因此,在上面的例子中,我们将数组与数据拉到一起,并在
for
循环之外创建一个
WTRandomVC
,这样所有数据只发生一次。

您的代码在从数据库得到的结果上循环,然后使用每个单独项目的数据创建一个新的
格式化程序
,并将其设置到图表中。这意味着一旦代码完成,图表将只显示来自数据库的最后一个结果。要显示所有结果,您需要将数据收集到单个
格式化程序中,然后在聊天室中显示

代码应该如下所示:

let ref = Database.database().reference().child("WeightTracker")

ref.child("\(currentUser)").queryOrderedByKey().observeSingleEvent(of: .value) { (snapshot) in

    var xAxisValues = [""]
    var yAxisValues = [0.0]

    for rest in snapshot.children.allObjects as! [DataSnapshot] {

        guard let restDict = rest.value as? [String: Any] else { continue }
        let weight = restDict["weight"] as? String
        let date = restDict["date"] as? String

        let total = Int(Double(weight!)!) * Int(2.20)
        xAxisValues.append(date!)
        yAxisValues.append(Double(total))
     }
    let formatter = WTRandomVC(lineChart: self.lineChartsView, xArray: xAxisValues , yArray: yAxisValues)
    self.lineChartsView?.data?.setValueFormatter(formatter)

 }
因此,在上面的例子中,我们将数组与数据一起拉入,并在
for
循环之外创建一个
WTRandomVC
,这样所有数据只发生一次