2014-10-04 29 views
32

Jak sprawdzić response.statusCode w SendSynchronousRequest w Swift Kod jest poniżej:Jak sprawdzić Response.statusCode w sendSynchronousRequest na Swift

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? 

przed iw Objective C, sprawdzamy response.statusCode z tym: (długie) response.statusCode ale w szybkich nie mam pojęcia w jaki sposób można sprawdzić kod statusu odpowiedzi

Odpowiedz

51

przejechania w nawiązaniu do odpowiedzi tak, aby wypełnić wtedy sprawdzić wynik i oddać go do httpResponse jak tylko http odpowiedzi deklarują właściwość kodu statusu.

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)") 
    } 

uwaga: w objc byłoby również użyć tego samego podejścia, ale jeśli używasz nawiasów kwadratu, kompilator nie wymusza do obsady. Swift (bezpieczny byt typu) ma egzekwować obsady zawsze

+0

Można łączyć/uprościć '' let' if' i oświadczenia do 'jeśli niech httpResponse = odpowiedź jako? NSHTTPURLResponse {...} '. –

+0

yip right Nie jestem tym, który został użyty do konstrukcji niech, ale jest czystszy! - edytowane –

+0

Dziękujemy! działa idealnie. – Raja

1

przypadku korzystania z biblioteki Just byłoby tak proste, jak:

Just.get("URL_IS_HERE").statusCode 
6

oczyścić do Swift 2.0 używając 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()` 
36

Wersja Swift 3 dla @GarySabo odpowiedź:

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() 
4

Używam n rozszerzenie URLResponse uprościć ten jeden (Swift 3):

extension URLResponse { 

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

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()