ios - 在解析 JSON 数据时,我从同一个 url 得到不同的结果

标签 ios json swift swift3

问题陈述:每次刷新 viewController 时,我都会得到不同的值。

必需的解决方案:每当我刷新时,它应该获取相同的值。

编码资料: 下面我通过 url 从 JSON 解析中获取值。获取值后,它作为参数传递给“setChart() 函数”。

 override func viewDidLoad() 
{
    super.viewDidLoad()
    var completedCalls = 0
            for i in 0..<strDates.count {
                Alamofire.request("http://api.fixer.io/\(strDates[i])?base=USD").responseJSON { response in
                    if let arr = response.result.value as? [String:AnyObject]
                    {
                        completedCalls += 1
                        let inrc = (arr["rates"]?["INR"] as? Double)!
                        print(inrc)
                        self.sValues.append(inc)
                        print(sValues) 
                        //It prints values here.
                        if completedCalls = strDates.count {
                            DispatchQueue.main {
                                setChart(dataPoints: strDates, values: sValues)
                            }
                        }
                    }
           }
  }

setChart() 函数

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

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

            let chartDataSet = BarChartDataSet(values: dataEntries, label: "INR Rates(₹)/$")
            let chartData = BarChartData(dataSet: chartDataSet)
            barChartView.data = chartData
            barChartView.leftAxis.axisMinimum = 65
            barChartView.leftAxis.axisMaximum = 70
            barChartView.xAxis.labelPosition = .bottom
            barChartView.rightAxis.enabled = false
            barChartView.data?.setDrawValues(false)

        }
   }

最佳答案

您正在发出一系列异步请求,但您无法保证它们完成的顺序。

我建议在字典中捕获结果,以 strDates 作为键。然后您可以在呈现结果时以正确的顺序提取它们。


因此,我假设 sValues 定义为:

var sValues = [Double]()

将其更改为:

var sValues = [String: Double]()

然后,而不是:

self.sValues.append(inc)

你会这样做:

self.sValues[strDates[i]] = inc

然后,在您的图表代码中,遍历 strDates 数组,并使用这些日期字符串查找 sValues

关于ios - 在解析 JSON 数据时,我从同一个 url 得到不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41631378/

相关文章:

ios - MobileSafari(iOS 浏览器): Is there a way to prevent horizontal/vertical scroll "snapping"?

ajax - JSONP 是否被归类为 AJAX?

java - 在数据库中读取/写入 POJO 作为 JSON 字符串

ios - 在 View Swift 中创建滑动动画

iOS SDK : Corner Radius shows incorrectly

ios - 如何在转换前强制加载 UIWebView

properties - Swift 类 : Property not initialized at super. init 调用中出现错误

swift +终端

ios - 旋转 UIImageView

json - 是否可以使用 json 的 json_serde::from_str() 获取值,其中字符串周围没有“”?