JSON解析在它自己单独的函数中不起作用



我看过或读过的关于Swift 3 JSON解析的所有教程都包括将JSON解析代码放在viewDidLoad() func/method中,它工作得很好。我想把JSON解析代码放在它自己的函数中,并从viewDidLoad()调用它。检查下面的例子:

class ViewController: UIViewController {
    var ArrayImages = [String]();
    override func viewDidLoad() {
        super.viewDidLoad()
        var json = ParseJson();
        print("My Array = (ArrayImages)");
    }
    // NEW FUNCTION
    func ParseJson() {
        let url = URL(string: "http://etasawoq.com/go_categories.php")!
        URLSession.shared.dataTask(with: url) { (data, response, error) in
            if (error != nil){
                print("Error Found Creating URLSession : (error)")
            } else {
                if let ParsedJson = data {
                    do {
                        let json = try JSONSerialization.jsonObject(with: ParsedJson, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSArray
                        for x in json {
                            let row = x as! NSDictionary; 
                            let imageUrl = row["image_url"] as! String
                            self.ArrayImages.append(imageUrl);
                        }
                    } catch {
                        print("Json Processing failed (error)");
                    }
                }
            }
        }.resume() // start session
    }
} 

不幸的是,当调用ParseJson函数时,"ArrayImages"没有被填充。打印输出为"My Array =[]"。为什么呢?如何解决这个问题,同时保持JSON解析代码在一个单独的函数?

您的响应通过块,因此您需要在块的一侧打印数组,而不是像下面这样在外部。

do {
                        let json = try JSONSerialization.jsonObject(with: ParsedJson, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSArray
                        for x in json {
                            let row = x as! NSDictionary; 
                            let imageUrl = row["image_url"] as! String
                            self.ArrayImages.append(imageUrl);
                        }
                      print("My Array = (ArrayImages)");
                    }

最新更新