我正在调用Url,它会在get()函数中给我Json。 我从另一个类调用get()函数并尝试以Array格式返回Json的结果。但它在return语句中显示Found null错误。当我试图打印Json的值时,它正确写入。 这是我在swift中的代码。
func get() -> NSArray
{
let postEndpoint: String = "Link_For_JSON_Data"
let session = NSURLSession.sharedSession()
let url = NSURL(string: postEndpoint)!
var jsonArray : NSArray?
var jsonArray1 : NSArray?
session.dataTaskWithURL(url, completionHandler: { ( data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in
// Make sure we get an OK response
guard let realResponse = response as? NSHTTPURLResponse where
realResponse.statusCode == 200 else
{
print("Not a 200 response")
return
}
// Read the JSON
do
{
if let contentString = NSString(data:data!, encoding: NSUTF8StringEncoding)
{
// Print what we got from the call
jsonArray = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as? NSArray
print("jsonArray here", jsonArray)
// Update the label
dispatch_async(dispatch_get_main_queue())
{ () -> Void in
self.getDataFormREST(jsonArray!)
}
}
}
catch
{
print("bad things happened")
}
}).resume()
return jsonArray!
}
func getDataFormREST(resultArray: NSArray) //-> NSArray
{
// let resultDictionary = resultArray[(searchDetails)!-1] as! NSDictionary
testArray = resultArray
print("TESTArray ON ",testArray)
}
答案 0 :(得分:0)
您无法编写执行异步调用的函数,然后将结果作为函数结果返回。这不是异步代码的工作原理。您的函数将异步dataTaskWithURL
请求排队,然后在它甚至有机会发送请求之前返回,更不用说接收结果了。
您必须将get()
函数重写为void函数(未返回结果),但需要完成块。然后,在您的数据任务的完成处理程序中,您可以从jsonArray
获取数据并调用get()
函数的完成块,并将jsonArray
传递给它。
看到我在Github上发布的这个项目说明了我在谈论的内容: