У меня есть ситуация, когда мне нужно получить доступ к необработанным данным ответа для AFJSONRequestOperation, изнутри блока обратного вызова, который включает только NSHTTPURLResponse. Я могу получить statusCode из NSHTTPURLResponse, но не вижу никакого способа добраться до необработанных данных. Есть ли хороший способ получить доступ к этому из блока обратного вызова отказа этой операции?
Как получить данные ответа из ответа NSHTTPURLResponse в обратном вызове AFJSONRequestOperation?
Ответ 1
NSHTTPURLResponse
содержит только информацию заголовка HTTP; нет данных тела. Нет, это было бы невозможно. Если у вас есть какой-либо контроль над этим кодом, попросите блок или метод передать сам процесс и получите responseData
или responseJSON
.
Ответ 2
В DataResponse<Any>
из responseJSON
вы можете получить тело из объекта DataResponse<Any>
используя response.result.value
или String(data:response.data!, encoding:.utf8)
.
Вы не можете получить его из response.response
, который является объектом NSHTTPURLResponse
. Это имеет только информацию заголовка.
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)
}
Ответ 3
Старый вопрос, но в любом случае...
Вам не нужно добираться до объекта операции, вы можете легко сделать что-то вроде:
NSData * data = [NSJSONSerialization dataWithJSONObject:JSON options:0 error:nil]];
С идентификатором JSON, который получает обратный вызов.