从函数中获取数据不能在swift中工作3

问题描述:

我可以获取JSON数据,但我无法将JSON数据添加到abcArr。我在viewDidLoad()中统计abcArr女巫为0从函数中获取数据不能在swift中工作3

我在下面复制编码。

谢谢你的帮助。

我的编码:

class MapDetailViewController: UIViewController { 
    var abcArr = [String]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     getInfo() 
     print("1: \(abcArr.count)")//output = 0 
    } 

    func getInfo() { 
     //MARK: get News data JSON 
     jsonURL = "http://json/abc.json" 

     if let url = NSURL(string: jsonURL) { 
      URLSession.shared.dataTask(with: url as URL, completionHandler: { (data, response, error) in 
       if let error = error { 
        print("Error: \(error.localizedDescription)") 
       } else { 
        if let data = data { 
         let json = JSON(data: data) 
         let jsonReturn = json["return"] 
         let abc = jsonReturn[i]["Lat"] 
         abcArr.append(abc)  
        } else { 
         print("no JSON data") 
        } 
       } 
      }).resume() 
      print("2: \(abcArr.count)")//output = 0 
     } 
    } 
} 
+0

凡要访问这个'abcArr'阵列 –

+0

我编辑我的编码。谢谢您的提醒 – ShingHung

+4

这是一个常见的误解。 'dataTask'异步工作。数据稍后返回。将“print(abcArr.count)'行放在完成句柄的末尾。 – vadian

谢谢您的解决方案Vadian。

将行打印(abcArr.count)放在完成处理程序的末尾。

class MapDetailViewController: UIViewController { 
    var abcArr = [String]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     getInfo() 
    } 

    func getInfo() { 
     //MARK: get News data JSON 
     jsonURL = "http://json/abc.json" 

     if let url = NSURL(string: jsonURL) { 
      URLSession.shared.dataTask(with: url as URL, completionHandler: { (data, response, error) in 
       if let error = error { 
        print("Error: \(error.localizedDescription)") 
       } else { 
        if let data = data { 
         let json = JSON(data: data) 
         let jsonReturn = json["return"] 
         let abc = jsonReturn[i]["Lat"] 
         abcArr.append(abc)  
        } else { 
         print("no JSON data") 
        } 
        print("1: \(abcArr.count)")// display abcArr of count 
       } 
      print("2: \(abcArr.count)")// display abcArr of count 
      }).resume() 
     } 
    } 
} 

我的JSON:

{ 
    return: [{ 
     lat: "1111", 
    }] 
} 
+0

你的处理程序中的变量i从哪里来? – user3441734

+0

我的JSON只有一个值,所以我不能使用循环 – ShingHung

+0

如果你需要循环,你可以让'json = JSON(data:data)'行后 – ShingHung