I’m new to Swift and I’m trying to upgrade some old Swift code. I’m getting the below warning:
‘responseJSON(queue:dataPreprocessor:emptyResponseCodes:emptyRequestMethods:options:completionHandler:)’
is deprecated: responseJSON deprecated and will be removed in
Alamofire 6. Use responseDecodable instead.
…in the below code:
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()
}
}
}
If I replace responseJSON with responseDecodable, I get this error:
Generic parameter ‘T’ could not be inferred
What do I need to do to update this code?
2
Answers
Alamofire recommends to use
responseDecodable()
because people were often usingresponseJSON()
, then get theresponse.data
, and call aJSONDecoder()
on it. So this was making inner call ofJSONSerialization
for "nothing". Also, since Codable is "new", and there were still old questions available, people could be missing the Codable feature. See this topic on Alamofire Repo.So if you use
Codable
, I encourage it when possible, useresponseDecodable()
instead.But, you still can do it manually, by retrieving
Data
with no conversion:For that, use:
In use:
That’s my code for ‘Alamofire’, ‘~> 5.6.2’