Ios Swift中的JSON解析和返回数据

Ios Swift中的JSON解析和返回数据,ios,json,swift,parsing,Ios,Json,Swift,Parsing,我有一个用于从web检索和解析JSON数据的Swift代码。除了我现在面临的一个问题外,一切似乎都很顺利。我试着解决了一段时间,在网上查了所有的资料 我已经创建了全局字典“dicOfNeighbours”,它希望通过调用“func startConnection”作为解析结果返回到其他类 dicOfNeighbours存储解析后的数据,直到它超出以下的结束括号: “让task=session.dataTaskWithRequest(urlRequest){…}” 之后,它只存储nil。返回的结果

我有一个用于从web检索和解析JSON数据的Swift代码。除了我现在面临的一个问题外,一切似乎都很顺利。我试着解决了一段时间,在网上查了所有的资料

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

dicOfNeighbours存储解析后的数据,直到它超出以下的结束括号: “让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
            }
var dicOfNeighbours=Dictionary()
func startConnection()->字典{
让requestURL:NSURL=NSURL(字符串:http://www....data.json")!
让urlRequest:NSMutableURLRequest=NSMutableURLRequest(URL:requestURL)
let session=NSURLSession.sharedSession()
let task=session.dataTaskWithRequest(urlRequest){
(数据、响应、错误)->在中无效
让httpResponse=响应为!NSHTTPURLResponse
让statusCode=httpResponse.statusCode
如果(状态代码==200){
做{
让json=try NSJSONSerialization.JSONObjectWithData(data!,选项:.AllowFragments)
如果让Neights=json[“Neights”]as?[字符串:数组]{
变量i=0
用于邻居中的(索引、值){
self.dicOfNeighbours[索引]=值
}
}
}抓住{
打印(“Json错误:\(错误)”)
}               
}
}
task.resume()
返回自助餐厅
}

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

要同步它,您需要使用信号量,但在主线程上非常不鼓励这样做


相反,在执行完成块时对结果执行适当的操作。将数据任务视为“完成任务,完成后返回给我”。

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

要同步它,您需要使用信号量,但在主线程上非常不鼓励这样做


相反,在执行完成块时对结果执行适当的操作。将数据任务视为“完成任务,完成后回到我身边”。

使用闭包,而不是“返回”<代码>dataTaskWithRequest:是异步的。请使用闭包,而不是“返回”
dataTaskWithRequest:
是异步的。你认为我可以像“Do…while(dicOfNeighbours==nil)”那样调用“func startConnection()”吗?等到它返回结果。我有点困惑,我想你应该对结果做一些事情,然后将其封装在函数中,并从完成块调用它。你认为我可以调用吗func startConnection()“像”do。。。。而(dicOfNeighbours==nil)??等它把结果告诉我。我有点困惑,我想你应该对结果做一些事情,然后将其封装在一个函数中,并从完成块调用它。