Jon_Shier
(Jon Shier)
1
5 Likes
Jon_Shier
(Jon Shier)
2
Alamofire 5.5's concurrency support supports awaiting the full response, result, or throwing value of a request.
let task = AF.request(...).serializingDecodable(Type.self)
let response = await task.response
let result = await task.result
let value = try await task.value
Convenience methods have also been added for the various asynchronous state producers, like onURLSessionTaskCreation.
let request = session.request(...)
async let uploadProgress = request.uploadProgress().collect()
async let downloadProgress = request.downloadProgress().collect()
async let requests = request.urlRequests().collect()
async let tasks = request.urlSessionTasks().collect()
async let descriptions = request.cURLDescriptions().collect()
async let response = request.serializingDecodable(TestResponse.self).response
let values: (uploadProgresses: [Progress],
downloadProgresses: [Progress],
requests: [URLRequest],
tasks: [URLSessionTask],
descriptions: [String],
response: AFDataResponse<TestResponse>)
values = await (uploadProgress, downloadProgress, requests, tasks, descriptions, response)
Alamofire 5.5 also now allows extremely compact usage with static accessors for our protocol types in Swift 5.5.
Previously
AF.request("https://httpbin.org/post",
method: .post,
parameters: Value(),
encoder: JSONParameterEncoder(),
interceptor: RetryPolicy())
.response(responseSerializer: DecodableResponseSerializer<TestResponse>()) { response in
debugPrint(response)
}
Now
AF.request("https://httpbin.org/post",
method: .post,
parameters: Value(),
encoder: .json,
interceptor: .retryPolicy)
.response(responseSerializer: .decodable(of: TestResponse.self)) { response in
debugPrint(response)
}