Because dataTask(with:completionHandler:)
returns a URLSessionDataTask
, it is impossible to be converted into async/await
directly. I think we need an extension method like below.
extension URLSessionDataTask {
func completion() async throws -> (Data, URLResponse) { ... }
}
Then we need to provide URLResponse
for error cases by throwing an error like @omochimetaru proposed.
enum
may be preferred.
enum URLSessionDataTaskError: Error {
case foo(message: String)
case bar(message: String, response: URLResponse) // when received a response but fails
...
}