Swift 无法将所有firebase数据显示到折线图
我试图在折线图中显示我的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
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
,这样所有数据只发生一次