Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Código fornecido do Alamofire não funciona

import Alamofire

func getMovies() async throws -> [Movie] { let urlString = baseURL + "/movies"

guard let url = URL(string: urlString) else {
    throw MovieServiceError.invalidURL
}

let request = AF.request(url)

let data = try await request.responseDecodable(of: [Movie].self)

guard data.response?.statusCode == 200 else {
    throw MovieServiceError.invalidResponse
}

return data.value ?? []

}

Simplesmente não funciona, fica reclamando pelo completion

2 respostas
solução!

Olá, Rodrigo.

Tudo bem?

Entendo que você está tendo problemas com o Alamofire e o uso de async/await. O Alamofire 5.x ainda não suporta nativamente async/await do Swift. Isso significa que você não pode usar try await request.responseDecodable(of: [Movie].self) diretamente. No entanto, você pode criar uma extensão para o Alamofire que suporte async/await. Aqui está um exemplo de como você pode fazer isso:

import Alamofire

extension DataRequest {
    func responseDecodable<T: Decodable>(of type: T.Type) async throws -> T {
        return try await withCheckedThrowingContinuation { continuation in
            self.responseDecodable(of: T.self) { response in
                switch response.result {
                case .success(let value):
                    continuation.resume(returning: value)
                case .failure(let error):
                    continuation.resume(throwing: error)
                }
            }
        }
    }
}

Agora, você pode usar try await com o Alamofire da seguinte maneira:

func getMovies() async throws -> [Movie] {
    let urlString = baseURL + "/movies"

    guard let url = URL(string: urlString) else {
        throw MovieServiceError.invalidURL
    }

    let request = AF.request(url)

    let data: [Movie] = try await request.responseDecodable(of: [Movie].self)

    return data
}

Por favor, note que este exemplo é apenas para fins demonstrativos e pode não ser perfeito para o seu caso. Espero ter ajudado e bons estudos!

Boa tarde Renan, tudo bem e com vc?

Muito interessante reforçar essa solução da extensão.

Obrigado!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software