Codable Swift: guia completo com exemplos práticos
1. O que é e para que serve
Codable é um protocolo nativo (typealias de Encodable & Decodable) da linguagem Swift, introduzido no Swift 4. Ele oferece uma forma declarativa de serializar e desserializar tipos de dados personalizados em formatos como JSON, Property List (plist) e outros. Em vez de escrever manualmente código complexo para converter structs em dicionários e vice-versa, o Codable gera automaticamente a lógica de codificação/decodificação com base nas propriedades do seu modelo.
Para que serve? No desenvolvimento moderno para iOS/macOS, praticamente todo aplicativo interage com APIs de servidor, recebendo e enviando dados em JSON. Sem o Codable, o desenvolvedor precisaria escrever loops, verificar tipos, lidar com valores opcionais e criar parsers manualmente. O Codable resolve isso, tornando o código mais limpo, seguro e reduzindo significativamente o tempo de desenvolvimento. Ele é o padrão de facto para trabalhar com JSON no ecossistema Apple.
O Codable funciona com base nos protocolos Encodable (para converter tipos Swift em dados) e Decodable (para converter dados em tipos Swift). Combinando-os, você obtém o ciclo completo de serialização. A biblioteca é totalmente integrada com JSONEncoder e JSONDecoder, que são as ferramentas principais para manipular JSON.
2. Instalação
O Codable faz parte da biblioteca padrão do Swift (Foundation). Nenhuma instalação adicional é necessária. Você não precisa usar pip, npm, CocoaPods ou Swift Package Manager para utilizá-lo. Basta importar o Foundation no seu arquivo:
import Foundation
Se você usa Swift no Linux (por exemplo, via Swift Package Manager), o Codable também está disponível nativamente. Para frameworks server-side como Vapor, o Codable é usado por padrão.
3. Início rápido — exemplo mínimo funcional
Vamos criar uma estrutura simples de usuário e serializar/desserializar para JSON.
import Foundation
// 1. Define o modelo conforme o protocolo Codable
struct User: Codable {
let id: Int
let name: String
let email: String
}
// 2. Cria uma instância
let user = User(id: 1, name: "Alice", email: "alice@example.com")
// 3. Codifica para JSON
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted // Para saída formatada
do {
let jsonData = try encoder.encode(user)
if let jsonString = String(data: jsonData, encoding: .utf8) {
print("JSON: \n\(jsonString)")
}
// 4. Decodifica de volta
let decoder = JSONDecoder()
let decodedUser = try decoder.decode(User.self, from: jsonData)
print("Usuário decodificado: \(decodedUser.name), email: \(decodedUser.email)")
} catch {
print("Erro: \(error)")
}
Saída no console:
JSON:
{
"id" : 1,
"name" : "Alice",
"email" : "alice@example.com"
}
Usuário decodificado: Alice, email: alice@example.com
Como você pode ver, com apenas algumas linhas de código a serialização está pronta.
4. Principais métodos/funções/classes
Vamos explorar os componentes essenciais do Codable que você usará constantemente.
4.1 JSONEncoder
Assinatura: class JSONEncoder : NSCoder
O que faz: Converte instâncias de tipos que estão em conformidade com o protocolo Encodable em um objeto Data (JSON).
Também na biblioteca
Registro em C++: visão geral das melhores bibliotecas e soluções
Cliente OAuth para Kotlin: biblioteca Ktor OAuth para autenticação em API
Trabalhando com S3 e armazenamentos em nuvem em Swift (iOS/macOS): biblioteca AWSS3
gRPC para Go (Golang): bibliotecas, exemplos e guia
Cliente Redis Swift: RediStack para iOS/macOS
Recommendations