0Pricing
Swift Academy · Aula

Tratamento de erros e códigos de status HTTP

Verifique códigos de status da resposta e mapeie erros para erros de domínio tipados.

Tratamento de erros e códigos de status HTTP é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 3 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.

Intervalos de códigos de status HTTP

As respostas HTTP sinalizam sucesso ou falha por meio de códigos de status: sucesso 2xx, redirecionamento 3xx, erro do cliente 4xx e erro do servidor 5xx.

// 200 OK, 201 Created
// 400 Bad Request, 401 Unauthorized, 404 Not Found
// 500 Internal Server Error

Verificando o status no Swift

Converta URLResponse para HTTPURLResponse e verifique statusCode após uma solicitação assíncrona.

let (data, response) = try await URLSession.shared.data(from: url)
guard let http = response as? HTTPURLResponse else {
  throw NetworkError.invalidResponse
}
guard (200..<300).contains(http.statusCode) else {
  throw NetworkError.httpError(http.statusCode)
}

Erros de rede tipados

Defina uma enumeração de erros tipada para falhas de rede, permitindo blocos catch exaustivos.

enum NetworkError: Error {
  case invalidURL
  case invalidResponse
  case httpError(Int)
  case decodingError(Error)
  case noData
}

Mapeando códigos de status para erros

Use uma instrução switch sobre os códigos de status para emitir erros de domínio significativos em vez de inteiros brutos.

switch http.statusCode {
case 200..<300: break // success
case 401: throw NetworkError.unauthorized
case 404: throw NetworkError.notFound
case 500..<600: throw NetworkError.serverError(http.statusCode)
default: throw NetworkError.httpError(http.statusCode)
}

Decodificando respostas de erro

Quando o status indica um erro, o corpo geralmente contém uma mensagem de erro em JSON. Decodifique-a para obter diagnósticos melhores.

if http.statusCode != 200 {
  struct APIError: Decodable { var message: String }
  let apiError = try? JSONDecoder().decode(APIError.self, from: data)
  throw NetworkError.serverMessage(apiError?.message ?? "Unknown error")
}

Propagação de erros em código assíncrono

A concorrência estruturada do Swift propaga erros naturalmente: um erro lançado cancela as tarefas irmãs em um TaskGroup.

async let users = fetchUsers()
async let posts = fetchPosts()
let (u, p) = try await (users, posts) // if either throws, both cancel

Capturando erros específicos

Use blocos catch tipados para lidar separadamente com diferentes tipos de erro no código que faz a chamada.

do {
  let items = try await fetchItems()
} catch NetworkError.unauthorized {
  showLoginScreen()
} catch NetworkError.httpError(let code) {
  print("HTTP Error: \(code)")
} catch {
  print("Unexpected: \(error)")
}

Códigos de URLError

URLError descreve falhas de conectividade: .notConnectedToInternet, .timedOut, .cannotFindHost.

do {
  let (data, _) = try await URLSession.shared.data(from: url)
} catch let urlError as URLError where urlError.code == .notConnectedToInternet {
  print("No internet connection")
}

Invólucro Result para operações de rede

Retorne Result das funções de busca quando quiser que o código chamador lide com os erros sem try/catch.

func fetchUser() async -> Result<User, NetworkError> {
  do {
    let user = try await performFetch()
    return .success(user)
  } catch let e as NetworkError {
    return .failure(e)
  } catch {
    return .failure(.unknown)
  }
}

Registro de erros

Registre os erros de rede com o contexto relevante (URL, código de status e corpo) para facilitar a depuração em produção.

func log(_ error: NetworkError, url: URL) {
  print("[Network] \(url.absoluteString) → \(error)")
}

Mensagens de erro para o usuário

Mapeie erros técnicos para mensagens compreensíveis. Nunca exiba códigos de status HTTP brutos na interface do usuário.

extension NetworkError: LocalizedError {
  var errorDescription: String? {
    switch self {
    case .unauthorized: return "Please log in again."
    case .notFound: return "The requested item was not found."
    case .serverError: return "Server error. Please try again later."
    default: return "Something went wrong."
    }
  }
}

Verificação rápida

Qual intervalo de códigos de status HTTP indica uma resposta bem-sucedida?

Recapitulação da lição

Depois de URLSession.data(from:), converta para HTTPURLResponse e verifique statusCode. Mapeie os códigos para casos de Error tipados. Use URLError para falhas de conectividade. Propague erros com try/throw e capture-os com blocos catch tipados.

Perguntas Frequentes

A aula “Tratamento de erros e códigos de status HTTP” é grátis?

Sim — o texto completo de “Tratamento de erros e códigos de status HTTP” é 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 “Tratamento de erros e códigos de status HTTP”?

Verifique códigos de status da resposta e mapeie erros para erros de domínio tipados. 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 3 de 4.

Quanto tempo leva a aula “Tratamento de erros e códigos de status HTTP”?

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