Ваш код перебирает результаты, полученные из базы данных, а затем создает новый formatter
с этими данными для каждого отдельного элемента и устанавливает его для диаграммы. Это означает, что на диаграмме будет отображаться только последний результат из базы данных после выполнения кода. Чтобы показать все результаты, вам нужно собрать данные в один formatter
, а затем показать , что в чате.
Код должен выглядеть примерно так:
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)
}
Итак, в приведенном выше примере мы извлекли массивы с данными и создали WTRandomVC
, вне цикла for
, так что они происходят только один раз для всех данных. .