Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

3.8K
Vistas
Actualice responseJSON a responseDecodable en Swift

Soy nuevo en Swift y estoy tratando de actualizar un código Swift antiguo. Recibo la siguiente advertencia:

'responseJSON(queue:dataPreprocessor:emptyResponseCodes:emptyRequestMethods:options:completionHandler:)' está en desuso: responseJSON está en desuso y se eliminará en Alamofire 6. Use responseDecodable en su lugar.

... en el siguiente código:

 extension Alamofire.DataRequest { func json(_ options: JSONSerialization.ReadingOptions = .allowFragments, successHandler: ((Any?) -> Void)? = nil, failureHandler: ((AFDataResponse<Any>) -> Void)? = nil) -> Self { return responseJSON() { response in if UtilityService.ensureSuccessful(response, failureHandler: { failureHandler?(response) }) { successHandler?(response.value) } NetworkActivityManager.sharedInstance.decrementActivityCount() } } }

Si reemplazo responseJSON con responseDecodable, aparece este error:

No se pudo inferir el parámetro genérico 'T'

¿Qué debo hacer para actualizar este código?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Alamofire recomienda usar responseDecodable() porque las personas a menudo usaban responseJSON() , luego obtenían response.data y llamaban a un JSONDecoder() en él. Entonces esto estaba haciendo una llamada interna de JSONSerialization para "nada". Además, dado que Codable es "nuevo" y todavía había preguntas antiguas disponibles, es posible que a las personas les falte la función Codable. Consulte este tema en Alamofire Repo.
Entonces, si usa Codable , lo animo cuando sea posible, use responseDecodable() en su lugar.

Pero aún puede hacerlo manualmente, recuperando Data sin conversión:

Para eso, usa:

 @discardableResult func responseData(queue: DispatchQueue = .main, dataPreprocessor: DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, emptyResponseCodes: Set<Int> = DataResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set<HTTPMethod> = DataResponseSerializer.defaultEmptyRequestMethods, completionHandler: @escaping (AFDataResponse<Data>) -> Void) -> Self

En uso:

 request.responseData { response in switch response.result { case .success(let data): do { let asJSON = try JSONSerialization.jsonObject(with: data) // Handle as previously success } catch { // Here, I like to keep a track of error if it occurs, and also print the response data if possible into String with UTF8 encoding // I can't imagine the number of questions on SO where the error is because the API response simply not being a JSON and we end up asking for that "print", so be sure of it print("Error while decoding response: "\(error)" from: \(String(data: data, encoding: .utf8))") } case .failure(let error): // Handle as previously error } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda