ios - Json 和变量范围

标签 ios json swift swift3

我的错误应该很明显,但我找不到它;

我在类的开头初始化了一个全局变量:

class InscriptionStageViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
var lesSemaines = [String]()

我尝试使用该函数用远程 json 文件填充此数组

func getSemainesStages(){
        let url = URL(string: "http://www.boisdelacambre.be/ios/json/semaines.json")
        let task = URLSession.shared.dataTask(with: url!){ (data, response, error) in
            if let content = data {
                do {
                    let myJson = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
                    let listeSemaines = myJson["semaine"] as! [[String:AnyObject]]
                    //print(listeSemaines)

                    for i in 0...listeSemaines.count-1 {
                        var tabSem = listeSemaines[i]
                        let intituleSemaine:String = tabSem["intitule"] as! String
                        //let dateSemaine:String = tabSem["date"] as! String

                        DispatchQueue.main.sync
                            {

                                self.lesSemaines.append(intituleSemaine)
                            }

                    }

                } catch
                {
                    print("erreur Json")
                }
            }

        }
        task.resume()
    }

当我在 viewDidLoad 中调用我的函数,然后打印我的全局数组时,它是空的(URL 正确,json 数据读取正确,当我在循环中读取附加在数组中的数据时,它打印(所以)需要值(value)...)

提前致谢

最佳答案

下载需要时间。介绍另一种方法:

func updateUi() {
    print(lesSemaines)
    //pickerView.reloadAllComponents()
}

下载完成后调用它:

func getSemainesStages(){
    // ... your code 
    let task = URLSession.shared.dataTask(with: url!){ (data, response, error) in
        // ... your code        
        for tabSem in listeSemaines{
             guard let intituleSemaine = tabSem["intitule"] as? String else {
                print("erreur Json")
                continue
            }
            self.lesSemaines.append(intituleSemaine)    
        }

        // update UI *after* for loop
        DispatchQueue.main.async {
            updateUi()   
        }
        // ... your code
    }
}

关于ios - Json 和变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43184215/

相关文章:

swift - 尝试快速移动 x 和 y 字段中的图像

ios - iPhone 上的 Swift playground

objective-c - 绘制移动的正弦波抗锯齿

python - 将更新的 json dict 保存回文件后缩进被破坏

java - json 到 java 对象的通用解析

javascript - 如何修改从 WordPress API 获取的日期格式?

ios - 从 iPhone 5 项目到 iPhone 6 和 Plus

ios - 如何为 UITableViewCell 找到 ViewController?

ios - 如何使用 ObjectMapper 映射此 JSON?

ios - 一次性将所有 Realm 对象转换为字典