2017-04-09 13 views
0

Swift 3で棒グラフを設定し、thisチュートリアルに従います。ioschartsで使用可能なオーバーロードエラーが見つかりません

私は私のviewControllerviewDidLoad内のデータ値の範囲内barChartViewを作成:

var months: [String]! 
var counts: [Double]! 
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] 
counts = [20.0, 4.0, 6.0, 3.0, 12.0, 16.0, 4.0, 18.0, 2.0, 4.0, 5.0, 4.0] 

をその後、私は値でsetChart関数を呼び出す:

setChart(dataPoints: months, values: counts) 

次のように関数自体が見えます:

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

    var dataEntries: [BarChartDataEntry] = [] 

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

    let chartDataSet = BarChartDataSet(values: dataEntries, label: "Units Sold") 
    let chartData = BarChartData(xVals: months, dataSet: chartDataSet) 
    countPerCountryView.data = chartData 
} 
let dataEntry = BarChartDataEntry(value: values[i], xIndex: i) 
Argument labels '(value:, xindex:)' do not match any available overloads 

、ここで:ここで、構築しようとしたときに、私は2回のエラー警告を取得しています

let chartData = BarChartData(xVals: months, dataSet: chartDataSet) 
Cannot invoke initializer for type 'BarChartData' with an argument list of type '(xvals: [String]!, dataSet: BarChartDataSet)' 
+1

なぜあなたは、非オプションの定数を宣言します( ' month'と 'counts')をアンラップされたオプションの暗黙的な変数として定義します??それらが変数であると思われる場合は、少なくとも非オプション配列として宣言します。 – vadian

答えて

3

iOSのチャートは、いくつかの変更があった:

  1. BarChartDataEntry(value:xIndex:)BarChartDataEntry(x: y:)
  2. BarChartData(xVals: dataSet:)に変更されましたがですから、この

    ようなものが必要BarChartData(dataSet:)

に変更されました また、

あなたはx軸のラベルを設定したい場合は、あなたが例えば、あなたのViewControllerでそれを行うことができます方法stringForValue(_: axis:)IAxisValueFormatterプロトコルを実装する必要があります。

class ViewController: UIViewController, IAxisValueFormatter { 

    // your code ... 

    // implement delegate method 
    func stringForValue(_ dataPointIndex: Double, axis: AxisBase?) -> String { 

     return someDataPoints[Int(dataPointIndex)] 
    } 

    func setChart(dataPoints: [String], values: [Double]){ 
     // your code ... 

     // Set delegate 
     lineChartView.xAxis.valueFormatter = self 
    } 

    // your code ... 
} 
+0

ありがとう!それがそれでした。変更を認識していなかった – Luk579

1

チャート3.0は、いくつかの重大な変更があります。試してみてくださいこの

class BarChartViewController: UIViewController, ChartViewDelegate { 

    @IBOutlet weak var barChartView: BarChartView! 

    let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     barChartView.delegate = self 
     barChartView.xAxis.valueFormatter = self 

     let unitsSold = [20.0, 4.0, 6.0, 3.0, 12.0, 16.0, 4.0, 18.0, 2.0, 4.0, 5.0, 4.0] 
     setChart(values: unitsSold) 
    } 

    func setChart(values: [Double]) { 
     barChartView.noDataText = "You need to provide data for the chart." 

     let chartData = BarChartDataSet() 
     for (i, val) in values.enumerated(){ 
      _ = chartData.addEntry(BarChartDataEntry(x: Double(i), y: val)) 
     } 
     barChartView.data = BarChartData(dataSet: chartData) 
    } 
} 

extension BarChartViewController: IAxisValueFormatter{ 
    func stringForValue(_ value: Double, axis: AxisBase?) -> String { 
     return months[ Int(value) % months.count] 
    } 
} 
+0

これはもっと更新された回答です:-)ありがとう! –

関連する問題