0Pricing
Swift Academy · Aula

URLSession data(from:) com async/await

Busque dados de forma assíncrona em APIs REST usando a API moderna do URLSession.

URLSession data(from:) com async/await é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 4 aulas no total.

API moderna do URLSession

O Swift 5.5+ oferece sobrecargas assíncronas no URLSession: data(from:delegate:), que suspendem a execução em vez de usar retornos de chamada.

let (data, response) = try await URLSession.shared.data(from: URL(string: "https://api.example.com/items")!)

Função completa de busca

Envolva a chamada em uma função assíncrona que lance erros para torná-la componível e testável.

func fetchItems() async throws -> [Item] {
  let url = URL(string: "https://api.example.com/items")!
  let (data, _) = try await URLSession.shared.data(from: url)
  return try JSONDecoder().decode([Item].self, from: data)
}

Chamando a partir do SwiftUI

Chame funções assíncronas a partir do modificador .task ou de Task { } dentro da ação de um botão.

struct ItemList: View {
  @State private var items: [Item] = []
  var body: some View {
    List(items, id: \.id) { Text($0.name) }
      .task { items = (try? await fetchItems()) ?? [] }
  }
}

URLRequest para cabeçalhos personalizados

Crie um URLRequest com método, cabeçalhos e body, depois passe-o para data(for:).

var request = URLRequest(url: URL(string: "https://api.example.com/login")!)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try? JSONEncoder().encode(LoginBody(email: "a@b.com", password: "pass"))
let (data, _) = try await URLSession.shared.data(for: request)

Verificando o status HTTP

Converta a resposta para HTTPURLResponse e verifique o código de status antes de decodificá-la.

let (data, response) = try await URLSession.shared.data(from: url)
guard let http = response as? HTTPURLResponse, http.statusCode == 200 else {
  throw URLError(.badServerResponse)
}
let item = try JSONDecoder().decode(Item.self, from: data)

Cancelamento

Cancelar a Task pai cancela automaticamente a solicitação do URLSession que está em andamento.

let task = Task {
  let items = try await fetchItems()
  // ...
}
task.cancel() // cancels URLSession request if in-flight

Enviando dados

Use upload(for:from:) para enviar dados binários ou formulários de forma assíncrona usando POST.

var request = URLRequest(url: uploadURL)
request.httpMethod = "POST"
let (data, _) = try await URLSession.shared.upload(for: request, from: imageData)

Baixando arquivos

download(from:) baixa um arquivo para uma URL temporária no disco, em vez de mantê-lo na memória.

let (fileURL, _) = try await URLSession.shared.download(from: remoteURL)
let destURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("file.pdf")
try FileManager.default.moveItem(at: fileURL, to: destURL)

Configuração personalizada do URLSession

Crie uma sessão personalizada com limites de tempo, política de cache e suporte a tarefas em segundo plano.

let config = URLSessionConfiguration.default
config.timeoutIntervalForRequest = 30
config.requestCachePolicy = .reloadIgnoringLocalCacheData
let session = URLSession(configuration: config)

bytes assíncronos para transmissão contínua

Use bytes(from:) para transmitir os dados da resposta linha a linha sem armazenar toda a resposta em um buffer.

let (stream, _) = try await URLSession.shared.bytes(from: url)
for try await line in stream.lines {
  print(line)
}

Testando com URLProtocol

Simule respostas de rede nos testes subclassificando URLProtocol e injetando-o em uma configuração de sessão personalizada.

class MockURLProtocol: URLProtocol {
  static var requestHandler: ((URLRequest) throws -> (HTTPURLResponse, Data))?
  // override canInit, startLoading, stopLoading
}

Verificação rápida

Qual método assíncrono do URLSession baixa uma resposta de URL diretamente para um arquivo temporário no disco?

Recapitulação da lição

Use URLSession.shared.data(from:) para solicitações GET assíncronas, data(for:) com um URLRequest personalizado para POST/PUT, download(from:) para baixar arquivos e bytes(from:) para transmissão contínua. Sempre verifique o código de status HTTP antes de decodificar a resposta.

Perguntas Frequentes

A aula “URLSession data(from:) com async/await” é grátis?

Sim — o texto completo de “URLSession data(from:) com async/await” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 4 aulas no total.

O que vou aprender em “URLSession data(from:) com async/await”?

Busque dados de forma assíncrona em APIs REST usando a API moderna do URLSession. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Swift Academy?

Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “URLSession data(from:) com async/await”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Swift Academy?

Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. URLSession data(from:) com async/await
  2. Codable: codificação e decodificação de JSON
  3. Tratamento de erros e códigos de status HTTP
  4. Lógica de novas tentativas e URLSession em segundo plano
← Voltar para Swift Academy