ios swift nsurlconnection nsurlrequest

ios - Cómo comprobar Response.statusCode en sendSynchronousRequest en Swift



nsurlconnection nsurlrequest (6)

Cómo comprobar response.statusCode en SendSynchronousRequest en Swift El código está a continuación:

let urlPath: String = "URL_IS_HERE" var url: NSURL = NSURL(string: urlPath) var request: NSURLRequest = NSURLRequest(URL: url) var response: AutoreleasingUnsafeMutablePointer<NSURLResponse?> = nil var error: NSErrorPointer? = nil var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: response, error: nil) as NSData?

antes y en el objetivo c, verificamos response.statusCode con esto: (long) response.statusCode pero en swift no tengo idea de cómo puedo verificar el estado de la respuesta Code


Limpiar para Swift 2.0 usando NSURLSession

let urlPath: String = "http://www.google.de" let url: NSURL = NSURL(string: urlPath)! let request: NSURLRequest = NSURLRequest(URL: url) var response: NSURLResponse? let session = NSURLSession.sharedSession() let task = session.dataTaskWithRequest(request) {urlData, response, reponseError in if let httpResponse = response as? NSHTTPURLResponse { print("error /(httpResponse.statusCode)") } } task.resume() //You should not write any code after `task.resume()`


Si usa la biblioteca Just sería tan simple como:

Just.get("URL_IS_HERE").statusCode


Swift 3 versión para @GarySabo respuesta:

let url = URL(string: "https://apple.com")! let request = URLRequest(url: url) let task = URLSession.shared().dataTask(with: request) {data, response, error in if let httpResponse = response as? HTTPURLResponse { print("statusCode: /(httpResponse.statusCode)") } } task.resume()


Utilizo una extensión para URLResponse para simplificar esta (Swift 3):

extension URLResponse { func getStatusCode() -> Int? { if let httpResponse = self as? HTTPURLResponse { return httpResponse.statusCode } return nil } }


usted pasa una referencia a la respuesta para que se complete ENTONCES usted verifica el resultado y lo envía a una respuesta HTTP, ya que solo las respuestas http declaran la propiedad del código de estado.

let urlPath: String = "http://www.google.de" var url: NSURL = NSURL(string: urlPath) var request: NSURLRequest = NSURLRequest(URL: url) var response: NSURLResponse? var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: nil) as NSData? if let httpResponse = response as? NSHTTPURLResponse { println("error /(httpResponse.statusCode)") }

nota: en objC también usaría el mismo enfoque, pero si usa corchetes cuadrados, el compilador no aplica el reparto. Swift (al ser seguro) hace cumplir el elenco siempre


Swift 3+

let dataURL = "https://myurl.com" var request = URLRequest(url: URL(string: dataURL)!) request.addValue("Bearer /(myToken)", forHTTPHeaderField: "Authorization") URLSession.shared.dataTask(with: request) { (data, response, error) in // Check if the response has an error if error != nil{ print("Error /(String(describing: error))") return } if let httpResponse = response as? HTTPURLResponse{ if httpResponse.statusCode == 401{ print("Refresh token...") return } } // Get data success }.resume()