2016-04-04 2 views
0

Я пытаюсь создать CandleStickChart с помощью библиотеки диаграмм (https://github.com/danielgindi/Charts). У меня есть следующий код:CandleStickChart. Swift 2.2

func setChart(xValues: [String], valuesCandleChart: [Double]) { 
    barChartView.descriptionText = "" 
    barChartView.noDataText = "You need to provide data for the chart." 

    var yValsCandleChart : [CandleChartDataEntry] = [CandleChartDataEntry]() 
    for i in 0..<xValues.count { 

     yValsCandleChart.append(ChartDataEntry(value: valuesCandleChart[i], xIndex: i)) 
    } 
    let candleChartDataSet = LineChartDataSet(yVals: yValsCandleChart, label: nil) 
    let data: CombinedChartData = CombinedChartData(xVals: xValues) 
    data.candleData = CandleChartData(xVals: xValues, dataSets: [candleChartDataSet] 
    barChartView.data = data 
    barChartView.leftAxis.customAxisMin = 0 
} 

Я получаю сообщение об ошибке «Не удается преобразовать значение типа„ChartDataEntry“к ожидаемому типу аргумента„CandleChartEntryType“»

EDIT:

Я не следующая код:

func setChart(xValues: [String], valuesCandleChart: [[Double]]) { 
    var yValsCandleChart : [CandleChartDataEntry] = [CandleChartDataEntry]() 

    for i in 0..<xValues.count { 
     print(" yValsCandleChart = \(valuesCandleChart[i])") 
     yValsCandleChart.append(CandleChartDataEntry(xIndex: i, shadowH: valuesCandleChart[i][0], shadowL: valuesCandleChart[i][1], open: valuesCandleChart[i][2], close: valuesCandleChart[i][0])) 
    } 

    let candleChartDataSet = CandleChartDataSet(yVals: yValsCandleChart, label: "test") 


    let data: CombinedChartData = CombinedChartData(xVals: xValues) 
    data.candleData = CandleChartData(xVals: xValues, dataSets: [candleChartDataSet]) 

} 

override func viewDidLoad() { 
    super.viewDidLoad() 

let xValues = ["Jan","Feb"] 
    let yValues: [[Double]] = [[10.0,1.5,5.5,3.6],[20.0,3.0,11.0,7.2]] 

    setChart(xValues, valuesCandleChart: yValues) 
} 

показана диаграмма однако не, Y. график и я не уверен, почему. Пожалуйста, смотрите изображение ниже:

enter image description here

EDIT 1:

теперь у меня есть код ниже:

func setChart(xValues: [String], valuesCandleChart: [[Double]]) { 


    var yValsCandleChart : [CandleChartDataEntry] = [CandleChartDataEntry]() 

    for i in 0..<xValues.count { 
     print(" yValsCandleChart = \(valuesCandleChart[i])") 
     let val = valuesCandleChart[i][0] 
     let high = valuesCandleChart[i][1] 
     let low = valuesCandleChart[i][2] 
     let open = valuesCandleChart[i][3] 
     let close = valuesCandleChart[i][4] 

     yValsCandleChart.append(CandleChartDataEntry(xIndex: i, shadowH: val + high, shadowL: val + low, open: val + open, close: val - close)) 
    } 

    let candleChartDataSet = CandleChartDataSet(yVals: yValsCandleChart, label: "test") 
    let data: CombinedChartData = CombinedChartData(xVals: xValues) 

    data.candleData = CandleChartData(xVals: xValues, dataSets: [candleChartDataSet]) 
    candleChartView.data = data 
} 

с помощью: пусть, Y.: [[Double]] = [[10,0 , 1,5,5,5,3,6,1,2], [20,0,3,0,11,0,7,2,1,2]]

+0

is 'ChartDataEntry' - это суперкласс' CandleChartDataEntry'? любое отношение bw их? –

+0

Я не уверен. Я использовал ChartDataEntry при использовании BarChart и LineChart. когда я использую «CandleChartDataEntry», я получаю сообщение об ошибке »не может вызывать инициализатор для типа« CandleChartDataEntry »со списком аргументов типа (значение: Double, xIndex: Int)» –

+0

Используете ли вы стороннюю библиотеку? Вам нужно взглянуть на документы для этой библиотеки и посмотреть, что такое иерархия классов объектов данных, и что вам нужно передать для каждого типа диаграммы. (И вы можете отредактировать свой вопрос, чтобы сказать «Я пытаюсь создать CandleStickChart, используя библиотеку с открытым исходным кодом' CandleStickChart', доступную по адресу . ») –

ответ

0

Вы используете неверный набор данных и класс ввода, используйте CandleChartDataSet и CandleChartDataEntry

Вы должны использовать его методы init.

CandleChartDataEntry (xIndex: Int, shadowH: Двойной, shadowL: Двойной, открытый: распашные, близко: Double)

var yValsCandleChart : [CandleChartDataEntry] = [CandleChartDataEntry]() 
for i in 0..<xValues.count { 

    yValsCandleChart.append(CandleChartDataEntry(xIndex: yourInt, shadowH: yourDouble, shadowL: yourDouble, open: yourDouble, close: yourDouble)) 
} 

let candleChartDataSet = CandleChartDataSet(yVals: yValsCandleChart, label: nil) 

Обновление: Это, как вы создаете свечи ввода данных палку из ChartsDemo

for (int i = 0; i < count; i++) 
{ 
    double mult = (range + 1); 
    double val = (double) (arc4random_uniform(40)) + mult; 
    double high = (double) (arc4random_uniform(9)) + 8.0; 
    double low = (double) (arc4random_uniform(9)) + 8.0; 
    double open = (double) (arc4random_uniform(6)) + 1.0; 
    double close = (double) (arc4random_uniform(6)) + 1.0; 
    BOOL even = i % 2 == 0; 
    [yVals1 addObject:[[CandleChartDataEntry alloc] initWithXIndex:i shadowH:val + high shadowL:val - low open:even ? val + open : val - open close:even ? val - close : val + close]]; 
} 
+0

Теперь я получаю сообщение об ошибке «не может вызывать инициализатор для типа« CandleChartDataEntry »с списком аргументов типа« (значение: Double, index: Int) »« ЗначенияCandleChart = [5.0, 7.0, 1.0, 1.0, 2.0 , 3.0, 11.0, 7.0, 7.0, 5.0], это правильный формат? –

+0

Это потому, что он не наследует суперкласса init (значение: Double, index: Int). ответ обновлен. вы должны использовать методы init CandleChartDataEntry. – Wingzero

+0

Привет, я все еще получаю сообщение об ошибке «не может вызывать инициализатор для типа« CandleChartDataEntry »с аргументом list type (xIndex: Int, shadowH: Double, shadowL: Double, open: Double, close: Double) .Type». Я обновил свой код со следующим сообщением об ошибке. –

Смежные вопросы