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