且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Swift Alamofire:如何获取 HTTP 响应状态代码

更新时间:2022-05-27 22:23:05

适用于 Swift 3.x/Swift 4.0/Swift 5.0 用户Alamofire >= 4.0/Alamofire >= 5.0

For Swift 3.x / Swift 4.0 / Swift 5.0 users with Alamofire >= 4.0 / Alamofire >= 5.0

response.response?.statusCode

更详细的例子:


More verbose example:

Alamofire.request(urlString)
        .responseString { response in
            print("Success: (response.result.isSuccess)")
            print("Response String: (response.result.value)")

            var statusCode = response.response?.statusCode
            if let error = response.result.error as? AFError {  
                statusCode = error._code // statusCode private                 
                switch error {
                case .invalidURL(let url):
                    print("Invalid URL: (url) - (error.localizedDescription)")
                case .parameterEncodingFailed(let reason):
                    print("Parameter encoding failed: (error.localizedDescription)")
                    print("Failure Reason: (reason)")
                case .multipartEncodingFailed(let reason):
                    print("Multipart encoding failed: (error.localizedDescription)")
                    print("Failure Reason: (reason)")
                case .responseValidationFailed(let reason):
                    print("Response validation failed: (error.localizedDescription)")
                    print("Failure Reason: (reason)")

                    switch reason {
                    case .dataFileNil, .dataFileReadFailed:
                        print("Downloaded file could not be read")
                    case .missingContentType(let acceptableContentTypes):
                        print("Content Type Missing: (acceptableContentTypes)")
                    case .unacceptableContentType(let acceptableContentTypes, let responseContentType):
                        print("Response content type: (responseContentType) was unacceptable: (acceptableContentTypes)")
                    case .unacceptableStatusCode(let code):
                        print("Response status code was unacceptable: (code)")
                        statusCode = code
                    }
                case .responseSerializationFailed(let reason):
                    print("Response serialization failed: (error.localizedDescription)")
                    print("Failure Reason: (reason)")
                    // statusCode = 3840 ???? maybe..
                default:break
                }

                print("Underlying error: (error.underlyingError)")
            } else if let error = response.result.error as? URLError {
                print("URLError occurred: (error)")
            } else {
                print("Unknown error: (response.result.error)")
            }

            print(statusCode) // the status code
    } 

(Alamofire 4 包含一个全新的错误系统,请看 此处 了解详情)

(Alamofire 4 contains a completely new error system, look here for details)

对于 Swift 2.x 用户,Alamofire >= 3.0

Alamofire.request(.GET, urlString)
      .responseString { response in
             print("Success: (response.result.isSuccess)")
             print("Response String: (response.result.value)")
             if let alamoError = response.result.error {
               let alamoCode = alamoError.code
               let statusCode = (response.response?.statusCode)!
             } else { //no errors
               let statusCode = (response.response?.statusCode)! //example : 200
             }
}