我的错误应该很明显,但我找不到它;
我在类的开头初始化了一个全局变量:
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/