Swift - iOS 图表 - 使用两个数据集合二为一的两个折线图视图 ViewController

Swift - iOS Charts - Two LineChart views using Two datasets in one ViewController

我有一个应用程序,我按天从 Firebase 获取一些数据,我试图使用 iOS 图表在单独的图表中显示每天的数据,但它崩溃并出现错误 'fatal error: Index out of range'。下面是我的代码:

 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

}

//按钮

  @IBAction func getResults(sender: UIButton) {
    let doubleArray = BGdataOutsideDay1.map { Double([=14=])!}
    //  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([=14=])!}
    //  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)

    }

如有任何帮助,我们将不胜感激!提前致谢! :)

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

任何人..

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

来解决此问题

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