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 ErrorVerificando 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 cancelCapturando 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
- URLSession data(from:) com async/await
- Codable: codificação e decodificação de JSON
- Tratamento de erros e códigos de status HTTP
- Lógica de novas tentativas e URLSession em segundo plano