2014-10-04 23 views
32

如何在斯威夫特 檢查response.statusCode在SendSynchronousRequest的代碼如下:如何檢查Response.statusCode在sendSynchronousRequest上斯威夫特

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? 

前,在客觀C,我們檢查response.statusCode有了這個: (長)response.statusCode 但在迅疾我不知道如何檢查響應狀態代碼

回答

51

你來響應一個引用傳遞,使其填充,那麼你檢查結果,並將其轉換爲一個類HTTPResponse因爲只有HTTP響應聲明狀態碼屬性。

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

注:在objC也將使用相同的方法,但如果你用方括號,編譯器不會強制轉換。斯威夫特(即安全型)確實如果使用Just庫作爲它會是那樣簡單執行中投始終

+0

您可以組合/簡化'if'和'let'語句'如果讓類HTTPResponse =迴應爲? NSHTTPURLResponse {...}'。 – 2014-10-04 10:02:54

+0

yip right我不是那種習慣於如果讓結構,但它更清潔! - 編輯 – 2014-10-04 10:04:01

+0

謝謝!工作完美。 – Raja 2017-09-01 12:28:24

1

Just.get("URL_IS_HERE").statusCode 
6

清理程序雨燕2.0採用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

Swift 3 for @GarySabo回答:

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

我用a N分機到URLResponse來簡化這個(SWIFT 3):

extension URLResponse { 

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

斯威夫特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()