意外地发现零,同时解开一个可选值返回

问题描述:

我打电话的网址,这将给我的JSON在get()函数。 我从另一个类调用get()函数并尝试以Array格式返回Json的结果。但它显示返回语句中发现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

可能的复制[下载JSON与NSURLSession不返回任何数据(HTTP://计算器。 com/questions/35289389 /下载 - json-with-nsurlsession-doesnt-return-any-data) – Moritz

你不能写一个函数来做一个异步调用,然后返回结果作为函数结果。这不是异步代码的工作方式。你的函数在异步dataTaskWithURL请求中排队,然后在它甚至有机会发送请求之前返回,更不用说接收结果。

您必须将您的get()函数重写为无效函数(无返回结果),但需要一个完成块。然后,在您的数据任务的完成处理程序中,您从jsonArray获取数据并调用get()函数的完成块,并将其传递给jsonArray

看到这个项目我张贴在Github上,说明了什么我谈论:的

SwiftCompletionHandlers on Github

+0

我有点困惑。你能展示我怎样才能使用这是我的代码@Duncan C –