Swift配列を反復処理し、iOSチャートでデータを使用するにはどうすればよいですか?

RDowns

配列から取得したデータを介して入力しようとしている棒グラフがあります。

チャートにデータを入力するために、この配列を反復処理しようとしています。

注意:以下のこの例では、テスト目的でハードコードされた3つのwinningStreakDM変数がありますが、「実際の」では、そのリーグにいる「ユーザー」の数に応じて、API呼び出しごとに数が異なる可能性があります。

これが、配列を反復処理し、適切なデータを構造化する必要がある理由です。

    let winningStreakDM1 : [String : Any] = [
        "id" : 2,
        "user_name" : "Dicky",
        "winning_streak" : 5
    ]

    let winningStreakDM2 : [String : Any] = [
        "id" : 6,
        "user_name" : "G",
        "winning_streak" : 2
    ]

    let winningStreakDM3 : [String : Any] = [
        "id" : 5,
        "user_name" : "Sultan",
        "winning_streak" : 0
    ]

私の問題は、最初の配列を反復処理して、上記のコードで機能するようにデータを構造化する方法がわからないことです。

これは私の完全なスクリプトです:

import UIKit
import Charts

class CommunityLeagueStatsVC: UIViewController {


// GRAPHS *********

@IBOutlet weak var chartView: BarChartView!
var values = [BarChartDataEntry]()

// ****************
//********CHART VARIABLES**************//

//WINS LOSSES DRAWS
var winStreak: Double = 0.0

@IBOutlet weak var leagueStatsScrollView: UIScrollView!

var noDefeats: Bool?
var noWins: Bool?
var biggestWin: String?
var biggestWinTeams: String?

var passedCommunityName: String?
@IBOutlet weak var communityName: UILabel!

var playerId2: String?
var communityId2: String?
var eMail2: String?

override func viewDidLoad() {
    super.viewDidLoad()


    let winningStreak =  ["Wins"]
    let gamesWon = [winStreak]
    setWinStreakChart(dataPoints: winningStreak, values: gamesWon)

    let defaults = UserDefaults.standard
    let Email = defaults.string(forKey: "userEmail")
    let playerId = defaults.string(forKey: "playerId")
    let commsId = defaults.string(forKey: "communityId")

    self.playerId2 = playerId
    self.communityId2 = commsId
    self.eMail2 = Email


}

 func setWinStreakChart(dataPoints: [String], values: [BarChartDataEntry]){

    xAxis.valueFormatter = WinningStreakFormatter(chartView: self.chartView)
    let barChartDataSet = BarChartDataSet(values: values, label: "Winning Streak")
    barChartDataSet.colors = ChartColorTemplates.material()

    let barChartData = BarChartData(dataSet: barChartDataSet)
    barChartData.setValueFont(UIFont.systemFont(ofSize: 12.0))
    self.chartView.data = barChartData
}


override func viewDidAppear(_ animated: Bool) {

    let myUrl = URL(string: "http://www.xxx.uk/xxx/getLeagueStats.php")
    var request = URLRequest(url:myUrl!)
    request.httpMethod = "POST"

    let postString = "player_id=\(self.playerId2!)&community_id=\(communityId2!)";

    request.httpBody = postString.data(using: String.Encoding.utf8);
    let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in
        DispatchQueue.main.async
            {
                do{

                    let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:AnyObject]
                    print (json!)

                       if let dict = json?["leagueStats"] as? [String:AnyObject] {

                          //WINNING STREAK

                        var values = [BarChartDataEntry]()

                        if let dataWinStreak = dict["winningStreak"] as? [[String : Any]] {
                            print ("test one")
                            for (index,item) in dataWinStreak.enumerated() {
                                if let yValue = item["winning_streak"] as? Int, let userName = item["user_name"] as? String {
                                    print ("test two")
                                    let barChartDataEntry = BarChartDataEntry(x: Double(index), y: Double(yValue), data: userName as AnyObject?)
                                    values.append(barChartDataEntry)

                                }
                            }

                            self.setWinStreakChart(dataPoints: ["wins"], values: values)
                        }
        catch{
            print(error)
                }
        }
        }
    task.resume()

}
}

更新:

これらは私が現在受け取っているエラーです:

ここに画像の説明を入力してください

ここに画像の説明を入力してください ここに画像の説明を入力してください

最初のエラーを含む行を少し遊んでコメントアウトすると、この段階に到達しました。この段階では、値を含むグラフが正しく表示されますが、各プレーヤーのuserNameを含むxAxisはありません。

ニラブD

BarChartDataEntryこの方法で配列を作成できます

var values = [BarChartDataEntry]()

if let dataWinStreak = dict["winningStreak"] as? [[String : Any]] {
    for (index,item) in dataWinStreak.enumerated() {
        if let yValue = item["winning_streak"] as? Int, let userName = item["user_name"] as? String {
            let barChartDataEntry = BarChartDataEntry(x: index, y: yValue, data: userName)
            values.append(barChartDataEntry)
        }
    }
}
//Now use values array

編集:setWinStreakChart静的データではなく動的データを使用しているため、関数を変更する必要があります。

func setWinStreakChart(dataPoints: [String], values: [BarChartDataEntry]){

    let  xAxis : XAxis = self.chartView.xAxis;
    xAxis.labelFont = UIFont(name: "HelveticaNeue-Light", size: 10.0)!
    xAxis.labelTextColor = UIColor.black
    xAxis.drawAxisLineEnabled = false
    xAxis.drawGridLinesEnabled = true
    xAxis.granularity = 1;
    xAxis.labelPosition = .bottom

    xAxis.valueFormatter = WinningStreakFormatter(chartView: self.chartView)
    let barChartDataSet = BarChartDataSet(values: values, label: "Winning Streak")
    barChartDataSet.colors = ChartColorTemplates.material()

    let barChartData = BarChartData(dataSet: barChartDataSet)
    barChartData.setValueFont(UIFont.systemFont(ofSize: 12.0))
    self.chartView.data = barChartData
}

そして、の配列を作成しているforループの後にこの関数を呼び出しますBarChartDataEntry

self.setWinStreakChart(dataPoints: ["wins"], values: values)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

JSXで配列を反復処理してデータリストを表示するにはどうすればよいですか?

分類Dev

JSON配列を反復処理して、Reactのテーブルにデータを表示するにはどうすればよいですか?

分類Dev

配列を反復処理し、データ型に基づいて要素を抽出するにはどうすればよいですか?

分類Dev

Rubyでネストされたwhileループを使用して配列を反復処理するにはどうすればよいですか?

分類Dev

Ansibleで、配列を使用してstdoutを反復処理するにはどうすればよいですか?

分類Dev

オブジェクト内の配列からの出力データを反復処理するにはどうすればよいですか

分類Dev

Rのデータテーブル列を反復処理して、プロットでグラフ化するにはどうすればよいですか?

分類Dev

列を反復処理して、既存の列のデータに新しい列を作成するにはどうすればよいですか?

分類Dev

配列を反復処理してpromiseチェーンの数を定義するにはどうすればよいですか?

分類Dev

タイプTimerの配列を反復処理し、各タイマーをnilに設定するにはどうすればよいですか。

分類Dev

python2.7を使用してネストされたforループを使用してデータフレームを反復処理し、新しいデータフレーム列に追加するにはどうすればよいですか?

分類Dev

ペアの配列リストを反復処理して、指定したキーの値を取得するにはどうすればよいですか?

分類Dev

forループを使用して関数を反復処理するにはどうすればよいですか?

分類Dev

Djangoモデル内の関数を使用してSQLデータベースを反復処理するにはどうすればよいですか?

分類Dev

データを取得し、オブジェクトとして返されたarraylistを反復処理するにはどうすればよいですか?

分類Dev

繰り返されるデータセットを反復処理して月間合計を取得するにはどうすればよいですか?

分類Dev

この配列リストを反復処理するにはどうすればよいですか

分類Dev

2つのデータフレームを反復処理してデータを比較し、処理を行うにはどうすればよいですか?

分類Dev

複数のリストを反復処理してデータテーブルを生成するにはどうすればよいですか?(KDB)

分類Dev

intパラメーターを使用してテンプレート関数を反復処理するにはどうすればよいですか?

分類Dev

2D numpy配列を反復処理するジェネレーターを作成するにはどうすればよいですか?

分類Dev

配列から複数のデータを取得するときにiOSチャートを使用するにはどうすればよいですか?

分類Dev

タイムアウトを使用して非同期イテレータを反復処理するにはどうすればよいですか?

分類Dev

JavaScriptで「クリック」イベントを使用して配列を反復処理するにはどうすればよいですか?

分類Dev

pandas データフレーム データの 2 列を反復処理するにはどうすればよいですか?

分類Dev

サブ配列の配列を反復処理するにはどうすればよいですか

分類Dev

文字列の配列を反復処理してSwiftで部分文字列を取得するにはどうすればよいですか?

分類Dev

Goのルーン文字で文字列を反復処理するにはどうすればよいですか?

分類Dev

2つの配列を反復処理してユーザー入力を出力するにはどうすればよいですか?

Related 関連記事

  1. 1

    JSXで配列を反復処理してデータリストを表示するにはどうすればよいですか?

  2. 2

    JSON配列を反復処理して、Reactのテーブルにデータを表示するにはどうすればよいですか?

  3. 3

    配列を反復処理し、データ型に基づいて要素を抽出するにはどうすればよいですか?

  4. 4

    Rubyでネストされたwhileループを使用して配列を反復処理するにはどうすればよいですか?

  5. 5

    Ansibleで、配列を使用してstdoutを反復処理するにはどうすればよいですか?

  6. 6

    オブジェクト内の配列からの出力データを反復処理するにはどうすればよいですか

  7. 7

    Rのデータテーブル列を反復処理して、プロットでグラフ化するにはどうすればよいですか?

  8. 8

    列を反復処理して、既存の列のデータに新しい列を作成するにはどうすればよいですか?

  9. 9

    配列を反復処理してpromiseチェーンの数を定義するにはどうすればよいですか?

  10. 10

    タイプTimerの配列を反復処理し、各タイマーをnilに設定するにはどうすればよいですか。

  11. 11

    python2.7を使用してネストされたforループを使用してデータフレームを反復処理し、新しいデータフレーム列に追加するにはどうすればよいですか?

  12. 12

    ペアの配列リストを反復処理して、指定したキーの値を取得するにはどうすればよいですか?

  13. 13

    forループを使用して関数を反復処理するにはどうすればよいですか?

  14. 14

    Djangoモデル内の関数を使用してSQLデータベースを反復処理するにはどうすればよいですか?

  15. 15

    データを取得し、オブジェクトとして返されたarraylistを反復処理するにはどうすればよいですか?

  16. 16

    繰り返されるデータセットを反復処理して月間合計を取得するにはどうすればよいですか?

  17. 17

    この配列リストを反復処理するにはどうすればよいですか

  18. 18

    2つのデータフレームを反復処理してデータを比較し、処理を行うにはどうすればよいですか?

  19. 19

    複数のリストを反復処理してデータテーブルを生成するにはどうすればよいですか?(KDB)

  20. 20

    intパラメーターを使用してテンプレート関数を反復処理するにはどうすればよいですか?

  21. 21

    2D numpy配列を反復処理するジェネレーターを作成するにはどうすればよいですか?

  22. 22

    配列から複数のデータを取得するときにiOSチャートを使用するにはどうすればよいですか?

  23. 23

    タイムアウトを使用して非同期イテレータを反復処理するにはどうすればよいですか?

  24. 24

    JavaScriptで「クリック」イベントを使用して配列を反復処理するにはどうすればよいですか?

  25. 25

    pandas データフレーム データの 2 列を反復処理するにはどうすればよいですか?

  26. 26

    サブ配列の配列を反復処理するにはどうすればよいですか

  27. 27

    文字列の配列を反復処理してSwiftで部分文字列を取得するにはどうすればよいですか?

  28. 28

    Goのルーン文字で文字列を反復処理するにはどうすればよいですか?

  29. 29

    2つの配列を反復処理してユーザー入力を出力するにはどうすればよいですか?

ホットタグ

アーカイブ