No maneje ningún error de connection a Internet antes de intentar analizar el resultado en Alamofire

¿Cómo debo manejar si ocurre un error cuando no hay connection a Internet en Alamofire? Intenté verificar si los datos son nulos o no, pero no funciona.

A continuación se muestra cómo utilizo Alamofire

Alamofire.request(.POST, REGISTER_URL, parameters: parameters, encoding: .JSON, headers: getAuthenticationHeader()).response { (request, response, data, errorType) -> Void in let resultObject: APIResults = APIResults(JSONDecoder(data!)); let responseCode: Int = Int(resultObject.code!)!;// THIS CRASHES WHEN THERE IS NO INTERNET CONNECTION if (responseCode == 200) { available = true; } finished = true; } 

Estoy de acuerdo con @Shripada. Primero debe usar Reachability para verificar la conectividad. Hay una biblioteca Swift aquí: https://github.com/ashleymills/Reachability.swift

Además, puede usar uno de los methods de validation de Alamofire:

 Alamofire.request(.POST, REGISTER_URL, parameters: parameters, encoding: .JSON, headers: getAuthenticationHeader()).validate(statusCode: 200 ..< 300).response { (request, response, data, error) -> Void in if error != nil { println("Server responded with: \(response.statusCode)") return } // Handle your response data here } 

Solución Swift 3

Suponiendo que tiene una instancia de Error , puede hacer lo siguiente:

 if let err = error as? URLError, err.code == URLError.Code.notConnectedToInternet { // No internet } else { // Other errors } 

Simplemente URLError error en un URLError . Esto funciona ya que URLError implementa el protocolo de Error . Aquí hay una cita de la documentation de Apple para reference:

URLError: describe errores en el dominio de error de URL.

Una vez que tiene una instancia URLError , puede simplemente comparar su propiedad de code , que es una enumeración URLError.Code , contra cualquier caso de enumeración relevante (en nuestro ejemplo URLError.Code.notConnectedToInternet ).

Esto funciona para mí en Swift2.x

 Alamofire.request(.POST, url).responseJSON { response in switch response.result { case .Success(let json): // internet works. case .Failure(let error): if let err = error as? NSURLError where err == .NotConnectedToInternet { // no internet connection } else { // other failures } } } 

Otra forma de verificar la connection a Internet existente

 import SystemConfiguration func connectedToNetwork() -> Bool { var zeroAddress = sockaddr_in() zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress)) zeroAddress.sin_family = sa_family_t(AF_INET) guard let defaultRouteReachability = withUnsafePointer(&zeroAddress, { SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)) }) else { return false } var flags : SCNetworkReachabilityFlags = [] if SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) == false { return false } let isReachable = flags.contains(.Reachable) let needsConnection = flags.contains(.ConnectionRequinetworking) return (isReachable && !needsConnection) } let hasInternet = connectedToNetwork()