ckr*_*der 2 charts linechart fatal-error ios swift
最近我将https://github.com/danielgindi/Charts添加到我的项目中,我有一个时间范围(1D,3M,1Y,5Y)的segmentControl来执行网络调用并从Yahoo获取数据.
首先,我必须为x轴的String值添加一个方法,其中包含以下内容:
class XAxisStringValueFormatter: NSObject, IAxisValueFormatter {
private var sValues: [String] = []
init(values: [String]) {
sValues = values
}
func stringForValue(_ value: Double, axis: AxisBase?) -> String {
return sValues[Int(value)]
}
}
Run Code Online (Sandbox Code Playgroud)
在我的LineChartViewController中,我有一个timeRange更改的委托来执行我的networkCall:
func networkCall(range: ChartRange) {
let symbol = self.symbol
YahooFinanceApiClient.requestEquityChartpoints(symbol: symbol, range: range, onSuccess: { chartpts in
self.createLineChart(range: range, chartpoints: chartpts)
}, onError: { error in
print("Error: \(error.localizedDescription)")
})
}
Run Code Online (Sandbox Code Playgroud)
这是我的创建Line ChartView:
func createLineChart(range: ChartRange, chartpoints: [EquityChartpoint]) {
// set data
var xValues: [String] = []
var yValues: [Double] = []
for object in chartpoints {
switch range {
case .OneDay:
let x = Formatters.sharedInstance.stringFromHours(date: object.date)
xValues.append(x!)
case .ThreeMonth, .OneYear, .FiveYear:
let x = Formatters.sharedInstance.stringFromDate(date: object.date)
xValues.append(x!)
}
let y = object.close
yValues.append(y!)
}
// charting
let formatter: XAxisStringValueFormatter = XAxisStringValueFormatter(values: xValues)
let xaxis: XAxis = XAxis()
var dataEntries: [ChartDataEntry] = []
for i in 0..<xValues.count {
let dataEntry = ChartDataEntry(x: Double(i), y: yValues[i], data: xValues as AnyObject)
dataEntries.append(dataEntry)
}
xaxis.valueFormatter = formatter
let lineChartDataSet = LineChartDataSet(values: dataEntries, label: "Price")
let data: LineChartData = LineChartData(dataSets: [lineChartDataSet])
self.lineChartView.data = data
self.lineChartView.xAxis.valueFormatter = xaxis.valueFormatter
}
Run Code Online (Sandbox Code Playgroud)
当我从"3M"移动到"1Y"时,我有一个致命错误 - 索引超出范围.我检查了xValues计数以匹配每个时间范围的yValues.似乎错误到达了xAxisStringValueFormatter,其中yValues计数与xValues不匹配.对我来说似乎很奇怪.任何人都知道我做错了什么?
小智 7
折线图超出折线图或条形图.读数为1.请在IAxisValueFormatter协议中进行以下更改.
func stringForValue(_ value: Double, axis: AxisBase?) -> String {
return myArr[Int(value) % myArr.count]
}
Run Code Online (Sandbox Code Playgroud)