如何遍历Swift数组并在iOS图表中使用数据?

降落

我有一个条形图,我试图通过从数组中提取的数据来填充该条形图。

我试图遍历此数组以填充我的图表。

请注意:在下面的示例中,有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()

}
}

更新:

这些是我目前收到的错误:

在此处输入图片说明

在此处输入图片说明 在此处输入图片说明

经过一些试验并注释掉了包含第一个错误的行,我到了这个阶段,该阶段可以正确显示带有值的图形,但是没有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

如何在Swift中使用for循环遍历元组数组

来自分类Dev

遍历Chef数组并在Ohai查找中使用键

来自分类Dev

Swift:从两个数组转换为数据集以在图表中使用

来自分类Dev

如何遍历数组并在 JSX 中显示数据列表?

来自分类Dev

如何遍历 R 数据框中的列并在每次迭代中使用列名创建新数据框?

来自分类Dev

如何通过遍历特定的列索引并在R中使用条件或语句来创建单独的数据框?

来自分类Dev

如何通过遍历特定的列索引并在R中使用条件或语句来创建单独的数据框?

来自分类Dev

Swift iOS 使用数据库中的数据更新图表

来自分类Dev

如何使用键值数组遍历JSON数据

来自分类Dev

我如何返回数组并在数据库的其他类中使用它

来自分类Dev

如何从javascript数组对象/JSON获取数据并在React JS中使用它

来自分类Dev

iOS Swift-如何使用核心数据存储数组?

来自分类Dev

遍历要在图表中使用的 JSON 文件

来自分类Dev

Swift - iOS 图表 - 在一个 ViewController 中使用两个数据集的两个 LineChart 视图

来自分类Dev

如何在Google表格图表中使用JavaScript数组?

来自分类Dev

如何循环遍历数组并在该数组的对象内显示数据,在反应和 javascript 中

来自分类Dev

如何在Swift中使用daniel gindi / Chart库在饼图中显示百分比符号(IOS图表)

来自分类Dev

如何在工具提示模板中使用剑道图表数据?

来自分类Dev

如何使用Webdatarocks获取列的总计并在图表中使用它

来自分类Dev

如何在JavaScript中使用“点击”事件遍历数组?

来自分类Dev

如何在本机反应中使用for循环遍历数组?

来自分类Dev

Codeigniter:如何在数组的值上使用echo并在图表JavaScript上使用它?

来自分类Dev

如何从日期中获取年份并在angularjs图表中使用它

来自分类Dev

使用数组中的值循环遍历本地数据库,并在循环内运行

来自分类Dev

如何从函数返回数据并在Node.js中使用

来自分类Dev

如何从 MongoDB 检索数据并在 Rest Assured 测试中使用

来自分类Dev

在iOS中使用数组数据时处理数组更新

来自分类Dev

在iOS中使用数组数据时处理数组更新

来自分类Dev

如何遍历自定义XML结构并在jQuery中使用信息

Related 相关文章

  1. 1

    如何在Swift中使用for循环遍历元组数组

  2. 2

    遍历Chef数组并在Ohai查找中使用键

  3. 3

    Swift:从两个数组转换为数据集以在图表中使用

  4. 4

    如何遍历数组并在 JSX 中显示数据列表?

  5. 5

    如何遍历 R 数据框中的列并在每次迭代中使用列名创建新数据框?

  6. 6

    如何通过遍历特定的列索引并在R中使用条件或语句来创建单独的数据框?

  7. 7

    如何通过遍历特定的列索引并在R中使用条件或语句来创建单独的数据框?

  8. 8

    Swift iOS 使用数据库中的数据更新图表

  9. 9

    如何使用键值数组遍历JSON数据

  10. 10

    我如何返回数组并在数据库的其他类中使用它

  11. 11

    如何从javascript数组对象/JSON获取数据并在React JS中使用它

  12. 12

    iOS Swift-如何使用核心数据存储数组?

  13. 13

    遍历要在图表中使用的 JSON 文件

  14. 14

    Swift - iOS 图表 - 在一个 ViewController 中使用两个数据集的两个 LineChart 视图

  15. 15

    如何在Google表格图表中使用JavaScript数组?

  16. 16

    如何循环遍历数组并在该数组的对象内显示数据,在反应和 javascript 中

  17. 17

    如何在Swift中使用daniel gindi / Chart库在饼图中显示百分比符号(IOS图表)

  18. 18

    如何在工具提示模板中使用剑道图表数据?

  19. 19

    如何使用Webdatarocks获取列的总计并在图表中使用它

  20. 20

    如何在JavaScript中使用“点击”事件遍历数组?

  21. 21

    如何在本机反应中使用for循环遍历数组?

  22. 22

    Codeigniter:如何在数组的值上使用echo并在图表JavaScript上使用它?

  23. 23

    如何从日期中获取年份并在angularjs图表中使用它

  24. 24

    使用数组中的值循环遍历本地数据库,并在循环内运行

  25. 25

    如何从函数返回数据并在Node.js中使用

  26. 26

    如何从 MongoDB 检索数据并在 Rest Assured 测试中使用

  27. 27

    在iOS中使用数组数据时处理数组更新

  28. 28

    在iOS中使用数组数据时处理数组更新

  29. 29

    如何遍历自定义XML结构并在jQuery中使用信息

热门标签

归档