2016-02-09 50 views
0

我怎样才能从NSUrlSession返回一个NSHttpUrlResponse状态代码。 我对这种语言很陌生。所以,如果还有其他更好的做法,请告诉我。我的代码就在这里。我怎样才能返回从NSUrlSession的NSHttpUrlResponse状态代码

//Method to return a status code 
     func responseCode() -> Int{ 
     var responseCode : Int=0 
     if Reachability.isConnectedToNetwork() == true { 
     // get news feed url 
     let url = NSURL(string: baseUrl) 
     let session = NSURLSession.sharedSession() 
//create request 
     let request = NSMutableURLRequest(URL: url!) 
     request.HTTPMethod = httpMethod 
//check null value 
     if (bodyData != "") { 
      request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding); 
     } 
     if (auth != "") { 
      print("Token Auth : \(auth)") 
      request.addValue("bearer \(self.auth)", forHTTPHeaderField:  "Authorization") 
     } 
     print("request : \(request)") 

//How to return a Integer from this below function 
     let task = session.dataTaskWithRequest(request,  completionHandler: {(data, response, error) -> Void in 
      print("Error\(error)") 
      if let httpResponse = response as? NSHTTPURLResponse { 
       print("HttpReponse\(httpResponse.statusCode)") 
       // Get a status code and assign it in a variable 
       responseCode = httpResponse.statusCode 
      } 
     }) 
     task.resume() 
//Return a response code in ViewController but it just return a initial set value that is 0 
     return responseCode 
     } 
//Return a responseCode in ViewController but it just return a initial set value that is 0 
    return responseCode 
    } 
+0

我有看到这个以前而是因为我很新的语言无法理解了。你可以请编辑我的代码。 – user3797004

回答

3

这里session.dataTaskWithRequest是一个异步任务,即它会在另一个线程(除主线程以外)和它的关闭被称为当你从服务器响应将被调用。

所以你在这里做的是你试图返回responseCode这是在主线程中调用,即它会返回之前,你有任何回应。

你应该使用完成处理:

func responseCode(completion: (statusCode:Int) ->()){ 
     if Reachability.isConnectedToNetwork() == true { 

      let url = NSURL(string: baseUrl) 
      let session = NSURLSession.sharedSession() 

      let task = session.dataTaskWithRequest(request,completionHandler: {(data, response, error) -> Void in 
       print("Error\(error)") 

       if let httpResponse = response as? NSHTTPURLResponse { 

        print("HttpReponse\(httpResponse.statusCode)") 
        // Get a status code and assign it in a variable 
        completion(statusCode: httpResponse.statusCode) 

       } 
      }) 
      task.resume() 
     } 
    } 

使用此功能如下:

responseCode { (statusCode) ->() in 
      print("Status Code:\(statusCode)") 
    } 
+0

我称以这种方式 connection.responseCode此函数({ 的StatusCode - >空隙中 打印(“ResponseCode \(的StatusCode)”) }) 这是一个正确的方式,因为米没有得到的值。 – user3797004

+0

你有没有在你的代码中设置'bodyData'和'auth',因为我删除了一些你的代码,只是为了专注于'处理程序' –

+0

雅我已经做的事情。即使我在该函数的顶部有一个打印代码,即使该打印没有显示在日志中。 – user3797004