如果在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;
}
发布于 2015-09-15 16:51:11
我同意@Shripada的说法。首先,您应该使用可达性来检查连接性。这里有一个Swift库:https://github.com/ashleymills/Reachability.swift
此外,您还可以使用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
}
发布于 2015-09-15 18:35:01
检查internet连接是否存在的其他方法
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()
发布于 2019-11-19 18:20:29
它可以在swift 5中工作
.catchError { (error: Error) in
if let err = error as? URLError, err.code == URLError.Code.notConnectedToInternet {
// No internet
} else {
// Other errors
}
}
https://stackoverflow.com/questions/32580412
复制相似问题