Ios 如何正确处理所有潜在的网络错误?

Ios 如何正确处理所有潜在的网络错误?,ios,http-status-codes,urlsession,Ios,Http Status Codes,Urlsession,我有一个networking manager类,它负责与我们服务的后端进行所有通信。当网络请求可能会失败时,我会尽力为用户提供一个良好的体验 现在,networking manager类请求通过后端验证: 内部func身份验证(使用emailAddress emailAddress:String,密码密码:String,使用完成完成:@escaping(Result)->Void){ //…创建请求。。。 task=session.dataTask(带:request,completionHan

我有一个networking manager类,它负责与我们服务的后端进行所有通信。当网络请求可能会失败时,我会尽力为用户提供一个良好的体验

现在,networking manager类请求通过后端验证:

内部func身份验证(使用emailAddress emailAddress:String,密码密码:String,使用完成完成:@escaping(Result)->Void){
//…创建请求。。。
task=session.dataTask(带:request,completionHandler:{(数据:data?,响应:URLResponse?,错误?)->Void in
如果let requestError=错误为?n错误{
//…处理CFNetworkErrors(-1001等)。。。
}
如果让httpResponse=响应为?HTTPURLResponse{
//…处理响应代码(200400401500)。。。
}否则{
//…处理不是“HTTPURLResponse”类型的响应。。。
}
})
//…开始任务。。。
}
我有另一个类,它管理将
数据
错误
返回到完成处理程序,这是基于响应的状态代码或请求的错误

在查看a和列表之后,我可以看到处理此类错误的可能性很大。我意识到并不是所有的
cfnetworkerror
都适合我的情况,但我仍然需要处理一长串错误

除了打开
requestError.code
之外,我是否应该采取其他方法来处理可能的错误

如果我要处理所有的
cfnetworkerror
,那么我将得到一个很长的逻辑块,它会像这样检查代码:

switch response.statusCode {

    case 200...299: // ...Do something with data...

    case 300...399: // ...Handle redirect...

    case 400...499: // ...Handle client error...

    case 500...599: // ...Handle server error...

    default: // ...Handle default error...

}
开关代码{
案例-1005://…处理错误。。。
案例-1001://…处理错误。。。
案例1://…处理错误。。。
案例200://…处理错误。。。
//…处理其余的错误。。。
默认值:/…句柄错误。。。
}
我还将使用一个很长的块来处理所有适当的响应状态代码,如下所示:

switch response.statusCode {

    case 200...299: // ...Do something with data...

    case 300...399: // ...Handle redirect...

    case 400...499: // ...Handle client error...

    case 500...599: // ...Handle server error...

    default: // ...Handle default error...

}
switch response.statusCode{
案例200://…对数据进行处理。。。
案例400://…处理丢失的用户凭据。。。
案例401://…处理不正确的凭据。。。
案例500://…处理内部服务器错误。。。
//…处理其余的状态代码。。。
默认值:/…处理默认错误。。。
}

在处理可能遇到的所有网络错误时,您能给我一些指导吗?

首先,我认为要具体处理所有可能的网络错误是非常困难的。正如您已经知道的那样,有一个组,因此更容易使它更通用一点来处理状态组。您可以在case语句中使用range运算符,如下所示:

switch response.statusCode {

    case 200...299: // ...Do something with data...

    case 300...399: // ...Handle redirect...

    case 400...499: // ...Handle client error...

    case 500...599: // ...Handle server error...

    default: // ...Handle default error...

}
您甚至可以在其中添加您想要处理的特定情况--例如,您可能想要以非常特定的方式处理401 Unauthorized,可能会通知用户--因此您可以将其作为自己的情况添加到switch语句中,并调用您想要通知用户问题的代码