JSON解析并在Swift中返回数据

时间:2016-01-28 11:12:18

标签: ios json swift parsing

我有一个Swift代码,用于从Web检索和解析JSON数据。一切似乎都很好,除了我现在面临的一个问题。我试图解决它一段时间,在线检查所有来源。

我创建了全局字典“dicOfNeighbours”,希望通过调用“func startConnection”将其作为解析结果返回给其他类。

dicOfNeighbours存储已解析的数据,直到它超出以下的结束括号: “let task = session.dataTaskWithRequest(urlRequest){...}” 在它存储 nil 之后。返回的结果也是零。

我尝试使用 inout 通过引用传递“dicOfNeighbours”变量,但它仍然返回nil结果。

我可能会错过一些解决方案。 我将不胜感激任何帮助和建议。

谢谢!

    var dicOfNeighbours = Dictionary<String, [Int]>()

        func startConnection() -> Dictionary<String, [Int]>{
                let requestURL: NSURL = NSURL(string: "http://www....data.json")!
                let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL)
                let session = NSURLSession.sharedSession()
                let task = session.dataTaskWithRequest(urlRequest) {
                    (data, response, error) -> Void in

                    let httpResponse = response as! NSHTTPURLResponse
                    let statusCode = httpResponse.statusCode

                    if (statusCode == 200) {

                        do{

                            let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments)

                            if let neighbours = json["neighbours"] as? [String: Array<Int>] {
                                    var i = 0
                                    for (index, value) in neighbours {
                                        self.dicOfNeighbours[index] = value

                                }

                            }

                        }catch {
                            print("Error with Json: \(error)")

                        }               
                    }
                }
                task.resume()
return self.dicOfNeighbours
            }

1 个答案:

答案 0 :(得分:2)

您正在使用return而不是使用回调。在网络连接完成后,您正在进行解析;异步。

要同步它,您需要使用信号量,但在主线程上强烈建议不要这样做。

相反,在执行完成块时,请对结果执行适当的操作。把数据任务想象成“做的事情,当你完成时回到我身边”。