Codable Swift: guia completo com exemplos práticos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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.

Recommendations