Swift - iOS图表 - 在一个ViewController中使用两个数据集的两个LineChart视图

时间:2017-03-07 09:10:00

标签: swift ios-charts

我有一个应用程序,我几天从Firebase获取一些数据,并且我试图使用iOS图表在单独的图表中显示每一天的数据,但它崩溃时出现错误'致命错误:索引退出范围'。以下是我的代码:

 func setChart(dataPoints: [String], values: [Double]) {

    var dataEntries: [ChartDataEntry] = []

    for i in 0..<dataPoints.count {
        let dataEntry = ChartDataEntry(value: values[i], xIndex: i)
        dataEntries.append(dataEntry)
    }





    let lineChartDataSet = LineChartDataSet(yVals: dataEntries, label: "Units Sold")
    let lineChartData = LineChartData(xVals: dataPoints, dataSet: lineChartDataSet)
    firstDayChart.data = lineChartData

}

func setChart2(dataPoints: [String], values: [Double]) {

    var dataEntries: [ChartDataEntry] = []

    for i in 0..<dataPoints.count {
        let dataEntry = ChartDataEntry(value: values[i], xIndex: i)
        dataEntries.append(dataEntry)
    }







    let lineChartDataSet = LineChartDataSet(yVals: dataEntries, label: "Units Sold")
    let lineChartData = LineChartData(xVals: dataPoints, dataSet: lineChartDataSet)
   secondDayChart.data = lineChartData

}

// BUTTON

  @IBAction func getResults(sender: UIButton) {
    let doubleArray = BGdataOutsideDay1.map { Double($0)!}
    //  print(doubleArray)
    // var newArray:[Double] = []


    self.doublesArrayDay1 = doubleArray

    if doublesArrayDay1.count != 0 {
    let bgAvg = doubleArray.reduce(0, combine: +) / Double(doubleArray.count)
    let highest = doubleArray.maxElement()
    let lowest = doubleArray.minElement()
    self.bgHighestDay1 = String(format: "%.1f", highest!)
    self.bgAvgDay1 = String(format: "%.1f", bgAvg)
    self.bgLowestDay1 = String(format: "%.1f", lowest!)
    self.firstDayHighest.text = self.bgHighestDay1! + " " + "\(self.units!)"
    self.firstDayAvg.text = self.bgAvgDay1! + " " + "\(self.units!)"
    self.firstDayLowest.text = self.bgLowestDay1! + " " + "\(self.units!)"
    } else {
        self.firstDayHighest.text = "0" + " " + "\(self.units!)"
        self.firstDayAvg.text = "0" + " " + "\(self.units!)"
        self.firstDayLowest.text = "0" + " " + "\(self.units!)"

    }
    let doubleArray2 = BGdataOutsideDay2.map { Double($0)!}
    //  print(doubleArray)
    // var newArray:[Double] = []


    self.doublesArrayDay2 = doubleArray

    if doublesArrayDay2.count != 0 {
        let bgAvg2 = doubleArray2.reduce(0, combine: +) / Double(doubleArray.count)
        let highest2 = doubleArray2.maxElement()
        let lowest2 = doubleArray2.minElement()
        self.bgHighestDay2 = String(format: "%.1f", highest2!)
        self.bgAvgDay2 = String(format: "%.1f", bgAvg2)
        self.bgLowestDay2 = String(format: "%.1f", lowest2!)
        self.secondDayHighest.text = self.bgHighestDay2! + " " + "\(self.units!)"
        self.secondDayAvg.text = self.bgAvgDay2! + " " + "\(self.units!)"
        self.secondDayLowest.text = self.bgLowestDay2! + " " + "\(self.units!)"
    } else {
        self.secondDayHighest.text = "0" + " " + "\(self.units!)"
        self.secondDayAvg.text = "0" + " " + "\(self.units!)"
        self.secondDayLowest.text = "0" + " " + "\(self.units!)"
         setChart(DateOutSideDay1, values: doublesArrayDay1)
    setChart(DateOutSideDay2, values: doublesArrayDay2)

    }

任何帮助将不胜感激!提前致谢! :)

1 个答案:

答案 0 :(得分:0)

首先,我认为你有一组数据点和另一组数值是很奇怪的,但它们的大小不一样? Imo这些集应该是相同的大小,因为值代表数据点。

Anywho ..

您可以将let dataEntry = ChartDataEntry(value: values[i], xIndex: i)替换为let dataEntry = ChartDataEntry(value: i < values.count ? values[i] : 0, xIndex: i)

来解决此问题

您可以定义在values数组中该索引没有可用值时使用的默认值,我将其设置为0