サービスのバックエンドとのすべての通信を行うネットワーキングマネージャクラスがあります。ネットワークの要求が失敗する可能性がある場合に、ユーザーに素晴らしい体験を提供しようとしています。すべての潜在的なネットワークエラーを適切に処理する方法はありますか?
は今、ネットワークマネージャクラスは、バックエンドでの認証を要求する:
internal func authenticate(withEmailAddress emailAddress: String, andPassword password: String, withCompletion completion: @escaping (Result<Data>) -> Void) {
// ...Create the request...
task = session.dataTask(with: request, completionHandler: { (data: Data?, response: URLResponse?, error: Error?) -> Void in
if let requestError = error as? NSError {
// ...Handle CFNetworkErrors (-1001, etc.)...
}
if let httpResponse = response as? HTTPURLResponse {
// ...Handle the response codes (200, 400, 401, 500)...
} else {
// ...Handle the response not being of type `HTTPURLResponse`...
}
})
// ...Start the task...
}
私はに基づいている完了ハンドラにData
またはError
のいずれかのリターンを管理し、別のクラスを持っています応答のステータスコードまたは要求のエラー
とCFNetworkErrorsのリストを見た後、私はこのようなエラーを処理するための多くの可能性があることがわかります。私はCFNetworkErrors
のすべてが私の場合には適切ではないことを認識していますが、私はまだ処理するための長いエラーリストが残っています。
requestError.code
のスイッチをオンにする以外のエラーを処理するための指示がありますか?
私はCFNetworkErrors
のすべてを処理した場合、その後、私はこのようなコードをチェックし、非常に長いロジックブロックで終わるでしょう:
switch code {
case -1005: // ...Handle error...
case -1001: // ...Handle error...
case 1: // ...Handle error...
case 200: // ...Handle error...
// ...Handle the rest of the errors...
default: // ...Handle error...
}
は、私はまたに非常に長いブロックで終わるだろうこのような適切な応答ステータスコードのすべてを扱う:
switch response.statusCode {
case 200: // ...Do something with data...
case 400: // ...Handle missing user credentials...
case 401: // ...Handle incorrect credentials...
case 500: // ...Handle internal server error...
// ...Handle the rest of the status codes...
default: // ...Handle default error...
}
あなたは私に遭遇することができるネットワークエラーのすべてを処理しようとしたときにいくつかの良い習慣があるかもしれないものにいくつかのガイダンスを与えることはできますか?
新しいアイデアを得ました。 – NSPratik