Как получить данные ответа из 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, который получает обратный вызов.

Другие вопросы по тегам