NSURLSessionクラスを使用してSwiftでHTTP経由でREST APIと通信するネットワークモデルを実装する作業を現在進めています。NSURLSessionデータタスクの応答処理
要求を調製するために、私はこのコードを使用します。今、私はそのようにリクエスト送信しています
var request = URLRequest(url: requestURL) // url is "http://somethingsomething...
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = body
:
session.dataTask(with: request) { data, response, error in
// Parse the data, response and error
}.resume()
を私の問題は、私はのhttpStatusCode
を確認したいということですエラーが発生する可能性があることを通知するために、応答が返されますが、完了ブロック内のresponse
はであり、HTTPURLResponse
ではありません。つまり、response
をタイプHTTPURLResponse
にキャストする必要があります。これまでのところ、2つの方法にアプローチしました。まず、「HTTPURLResponseにキャストできませんでした」シナリオを処理する別のエラーシナリオを追加します。もう1つの方法はキャストを単にHTTPURLResponse
に強制します。最初のオプションはよかったようですが、無駄なコードを追加するだけかもしれません。なぜなら、おそらくキャストは常に成功するからです。
基本的には、私の質問です - 私はHTTPサーバーに要求を送信する場合、応答は常にHTTPURLResponse
タイプのでしょうか?または、response
オブジェクトが別の型であるか、またはnilである状況を処理するコードを実装する必要がありますか?
また、私の実装では、完了ブロックがnilではないエラーを返した場合、何かをキャストしようとする前にフローが戻ってくることは言うまでもないでしょう。
その場合、私は未処理のシナリオを持っています。ここでは、 'httpResponse = responseを? HTTPURLResponse'が失敗します。私の質問です - 私は100%HTTPサーバーと対話している場合、失敗しないことを確認することができますか? – user3581248
私はそれを毎日HTTPサーバーとやりとりして使用しますが、決して失敗しません。 – Sethmr
@ user3581248 - いいえ、それが 'HTTPURLResponse'であることを保証することはできません。なぜなら、もし' if let'または 'guard'を安全にunwrapする必要があるからです。エンドユーザはなぜそれが失敗したのか気にしないことを考えれば、私は 'if' /' guard'ステートメントで両方をチェックします。 'guardはhttpResponse = responseを? HTTPURLResponse、httpResponse.statusCode == 200 else {//ここでエラーを処理} '。 – Rob