質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

3回答

3865閲覧

Swiftでレーダーチャートを書きたい

takhub

総合スコア28

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2016/09/08 14:23

編集2016/09/20 02:25

###実現したいこと
ブログ記事を参考に、グラフ描画ライブラリ「ios-charts」を用いたデモファイル「iOSChartsDemo」をもとに、レーダーチャートを書きたいです。

###エラー内容

Argument labels '(value:, xIndex:)' do not match any available overloads Incorrect argument label in call (have 'yVals:label:'; expected 'values:label:')

###該当コード
該当のコードを以下に記します。

swift

1import UIKit 2import Charts 3 4class BarChartViewController: UIViewController { 5 @IBOutlet weak var barChartView: BarChartView! 6 7 var months: [String]! 8 func setChart(dataPoints: [String], values: [Double]) { 9 barChartView.noDataText = "You need to provide data for the chart." 10 11 var dataEntries: [BarChartDataEntry] = [] 12 13 for i in 0..<dataPoints.count { 14 let dataEntry = BarChartDataEntry(value: values[i], xIndex: i) 15 dataEntries.append(dataEntry) 16 } 17 18 let chartDataSet = BarChartDataSet(yVals: dataEntries, label: "Units Sold") 19 let chartData = BarChartData(xVals: months, dataSet: chartDataSet) 20 barChartView.data = chartData 21 22 } 23 24 override func viewDidLoad() { 25 super.viewDidLoad() 26 // Do any additional setup after loading the view, typically from a nib. 27 barChartView.noDataText = "You need to provide data for the chart." 28 29 barChartView.noDataTextDescription = "GIVE REASON" 30 months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] 31 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] 32 33 setChart(months, values: unitsSold) 34 } 35 36 37}

###スクリーンショット

エラーメッセージ

おそらく引数の記述に問題があるのだと思いますが、ググれどググれどわからず、どうかよろしくお願いします。
BarChartDataEntry, BarChartDataSetおよびBarChartDataの宣言元を下記に示します。

Swift

1public class BarChartDataEntry: ChartDataEntry 2{ 3 public required init() 4 { 5 super.init() 6 } 7 8 /// Constructor for stacked bar entries. 9 public init(x: Double, yValues: [Double]) 10 { 11 super.init(x: x, y: BarChartDataEntry.calcSum(yValues)) 12 self._yVals = yValues 13 calcRanges() 14 calcPosNegSum() 15 } 16 17 /// Constructor for normal bars (not stacked). 18 public override init(x: Double, y: Double) 19 { 20 super.init(x: x, y: y) 21 } 22 23 /// Constructor for stacked bar entries. 24 public init(x: Double, yValues: [Double], label: String) 25 { 26 super.init(x: x, y: BarChartDataEntry.calcSum(yValues), data: label) 27 self._yVals = yValues 28 calcRanges() 29 calcPosNegSum() 30 } 31 32 /// Constructor for normal bars (not stacked). 33 public override init(x: Double, y: Double, data: AnyObject?) 34 { 35 super.init(x: x, y: y, data: data) 36 }

Swift

1public class BarChartDataSet: BarLineScatterCandleBubbleChartDataSet, IBarChartDataSet 2{ 3 public required init() 4 { 5 super.init() 6 initialize() 7 } 8 9 public override init(values: [ChartDataEntry]?, label: String?) 10 { 11 super.init(values: values, label: label) 12 initialize() 13 } 14

Swift

1public class BarChartData: BarLineScatterCandleBubbleChartData 2{ 3 public override init() 4 { 5 super.init() 6 } 7 8 public override init(dataSets: [IChartDataSet]?) 9 { 10 super.init(dataSets: dataSets) 11 } 12

###補足情報(言語/FW/ツール等のバージョンなど)
######バージョン情報
Alamofire 3.4
Charts 2.2.5
XCode 7
iOS 9.3.5

######利用しているライブラリ
ios-charts
Alamofire
SwiftyJSON

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2016/09/09 04:23

ファイルにライブラリが含まれていないようですが?
takhub

2016/09/09 05:34

失礼しました。デモファイル「iOSChartsDemo」に加え、ライブラリ「ios-charts」を追記いたしました。
guest

回答3

0

ベストアンサー

おそらく、質問のデモログラムのコードは、もともと
https://github.com/jorgecasariego/iOS-Examples
の「iOSChartDemo」から入手したものだと思います。

で、このデモプログラムを上記URLからダウンロードして入手し、
iOSChartsDemo/iOSChartsDemo.xcworkspace
を開いて実行したら、普通にエラーなく実行できました。

内容を確認してみると、このデモプログラムで使用しているChartsのバージョンは2.1.6で、最新版よりちょっと古い(2015/11/3リリース)ものです。現在の最新版はご存知の通り2.2.5ですが、2.1.6から2.2.5になるまでの間に今回エラーが出ている部分のパラメータ指定等いろいろ変わったようです。

つまり、今エラーが出ている原因は、2.1.6用のデモコードを使って2.2.5のChartsを実行しようとしているためです。

2.1.6を使いたいのであれば、この回答で示したURLからダウンロードすれば2.1.6のChartsも一緒にダウンロードされます。
しかし、私としてはやはり最新版の2.2.5を使うことをお勧めします。2.2.5のChartsを使うデモは、ChartsのGitHub(https://github.com/danielgindi/Charts)からダウンロードしたプロジェクトの
ChartsDemo/ChartsDemo.xcodeproj
を開いて実行すればいいです。

投稿2016/09/09 14:58

TakeOne

総合スコア6299

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takhub

2016/09/10 01:51

ご丁寧に詳細ご説明くださりありがとうございます! おかげさまで何が起きているのか理解でき、旧版、最新版ともにデモプロジェクトを実行できました! 補:途中で「Code signing is required for product type...」とのエラーが出てつまづきましたが、Target > Build Setting > Code Signing > Code Signing Identityで自身をiiPhone Developerとして選択することで解決しました。
takhub

2016/09/10 01:52

fuzzballさんも前回に引き続きありがとうございました!
guest

0

使っているChartsのバージョンが古いようです。
最新版(2.2.5)をインストールして下さい。

投稿2016/09/09 05:47

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takhub

2016/09/09 11:06

ありがとうございます。 Carthageを使って最新版(2.2.5)をインストールしましたが、依然おなじエラー箇所で同じエラーが出ていまいます。
fuzzball

2016/09/09 11:13

私はCocoaPodsでインストールしましたが、質問のコードそのままでビルド出来ました。
takhub

2016/09/09 11:33

グラフも表示されますか?
fuzzball

2016/09/09 11:37

実行までは試していません。週明けまで環境がありませんので、これ以上の検証はそれ以降になります。
takhub

2016/09/09 11:46

承知しました。ご確認いただいてありがとうございます。引き続き原因さぐってみます。
fuzzball

2016/09/11 23:49

解決しているのにアレですが、Charts 2.2.5 + 質問のコードでビルド&実行まで確認しました。グラフ(水色の棒グラフ)も表示されています。
takhub

2016/09/13 07:52

fuzzballさん、わざわざ確認くださりありがとうございます!結局、最新のバージョンでやってみることにしました。
guest

0

調べていないので、確認の仕方を共有します。

エラーが出ている、BarChartDataSetクラスの部分でコマンドキーを押しながらクリックすると
該当メソッドが宣言されているヘッダーファイルに飛ばされると思います。
そこに書かれているメソッドの引数の型と呼び出し時に渡されている値の型が一致しているか確認してみてください。
values[i] の値は一度変数か何かに一度取り出してから扱うともう少しデバッグ時は見やすいかもしれません。

2つ目のエラーも同様です。
的外れだったら、すみません。

投稿2016/09/09 00:22

YasuhiroMiyake

総合スコア1336

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takhub

2016/09/09 03:53 編集

早速の回答ありがとうございます。 ご指導いただいた通り宣言元を確認しましたが、引数がどれなのかわかりかねています。 また、ファイルダウンロードURLを間違えていたため修正しました。
fuzzball

2016/09/09 03:56

BarChartDataEntry()の方は、valueがFloatだと思いますのでvalues[i]をキャストして下さい。 BarChartDataSet()の方は、yValsをvaluesにすれば直りそうな気がします。 >>引数 自分で分からないならここに張り付けて下さい。
takhub

2016/09/09 04:12

このような感じでしょうか? let dataEntry = BarChartDataEntry(value: values[i] as! String, xIndex: i) 先のエラーに加え、Cast from 'Double' to unrelated type 'Float' always failsという警告が出てしまいます。 BarChartDataSet()の方はエラーメッセージ通りyValsをvaluesにすると、その下の行でCannot invoke initializer for type 'BarChartData' with an argument list of type '(xVals: [String]!, dataSet: BarChartDataSet)'というエラーが吐かれます。 引数についてですが、わからないというより見当たりません。それぞれ下記が宣言元です。 - public class BarChartDataEntry: ChartDataEntry{...} - public class BarChartData: BarLineScatterCandleBubbleChartData{...} いろいろと勉強不足で申し訳ありませんが、よろしくお願いします。
fuzzball

2016/09/09 04:26

init()です。複数ある場合は、今回使ってそうなやつを選んで下さい。分からなければinit()を全部書き出して下さい。(ここに書かずに質問欄に追記して下さい)
takhub

2016/09/09 05:35

自分ではわからず、すみませんが全て質問欄に追記しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問