web-dev-qa-db-ja.com

AFJSONRequestOperationのコールバックでNSHTTPURLResponseから応答データを取得する方法は?

NSHTTPURLResponseのみを含むコールバックブロック内から、AFJSONRequestOperationの生の応答データにアクセスする必要がある状況があります。 NSHTTPURLResponseからstatusCodeを取得できますが、生データにアクセスする方法がわかりません。この操作の失敗コールバックブロックからこれにアクセスするために誰かが知っている良い方法はありますか?

26
Todd Hopkinson

NSHTTPURLResponseにはHTTPヘッダー情報のみが含まれます。ボディデータはありません。いいえ、これは不可能です。このコードを制御できる場合は、ブロックまたはメソッドに操作自体を渡して、responseDataまたはresponseJSONを取得します。

43
mattt

responseJSONからのコールバックでは、_DataResponse<Any>_またはString(data:response.data!, encoding: .utf8)を使用して_response.result.value_オブジェクトから本体を取得できます。

NSHTTPURLResponseオブジェクトである_response.response_からは取得できません。これにはヘッダー情報しかありません。

_Alamofire.request(URL(string: "https://foo.com")!).validate(statusCode: 200..<300).responseJSON() { response in
    let body = response.result.value
}
_

Http応答が検証しない場合、上記は機能しません。しかし、これはします:

_Alamofire.request(URL(string: "https://foo.com")!).validate(statusCode: 200..<300).responseJSON() { response in
    let body = String(data:response.data!, encoding: .utf8)
}
_
1
spnkr