在尝试parsingAlamofire中的结果之前,处理没有Internet连接错误

Alamofire没有互联网连接时,如果发生错误,我应该如何处理。 我试着检查数据是否为零,但它不工作。

以下是我如何使用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; } 

我同意@Shripada。 首先你应该使用Reachability来检查连通性。 这里有一个Swift库: https : //github.com/ashleymills/Reachability.swift

此外,您可以使用Alamofirevalidation方法之一:

 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 } 

Swift 3解决scheme

假设您有一个Error实例,您可以执行以下操作:

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

您只需将error转换为URLError 。 这是因为URLError实现了Error协议。 以下是苹果文档的引用以供参考:

URLError:描述URL错误域中的错误。

一旦你有一个URLError实例,你可以简单地将它的code属性(这是一个URLError.Code枚举)与任何相关的枚举情况(在我们的例子URLError.Code.notConnectedToInternet )进行比较。

这在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 } } } 

其他方式来检查互联网连接存在

 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(.ConnectionRequired) return (isReachable && !needsConnection) } let hasInternet = connectedToNetwork()