Associated Values em Swift: o que é, sintaxe e exemplos

Autor: IT Sectr Publicado: 2026-06-17 Tempo de leitura: 6 min

Associated Values — um mecanismo do Swift que permite anexar dados arbitrários a cada caso de enum individualmente. Ao contrário dos raw values, onde todos os casos têm valores do mesmo tipo, os associated values podem diferir em tipo e quantidade para cada caso. De acordo com Apple Documentation, 2026, esta é uma capacidade chave para modelar com precisão um domínio sem criar tipos wrapper adicionais.

Principais Pontos

  • Associated Values — dados individuais anexados a um caso de enum
  • Tipos de associated values podem diferir para cada caso
  • Extração é feita via vinculação de valores em switch ou if case
  • Exclusão Mútua — associated values são incompatíveis com raw values
  • Prática — modelagem de erros, resultados de consultas e estados de UI

O que são Associated Values?

Associated Values são informações adicionais que um caso de enum pode armazenar consigo mesmo. Ao contrário dos raw values, que são fixos no nível de declaração, os associated values são definidos ao criar uma instância de enum.

Imagine modelar um método de pagamento: o caso creditCard pode armazenar os últimos 4 dígitos e a data de validade, enquanto o caso applePay não armazena nada. Com associated values, isso é implementado naturalmente, sem subclasses ou campos opcionais.

De acordo com a documentação da Apple, os associated values transformam um enum de um simples conjunto de constantes em um tipo de dado algébrico (sum type), característico de linguagens funcionais. Isso aumenta significativamente a expressividade do código.

Sintaxe de associated values

Os Associated Values são declarados entre parênteses após o caso, especificando nomes e tipos de parâmetros, como em funções.

swift
enum MediaFile {
    case image(width: Int, height: Int, format: String)
    case video(duration: Double, codec: String)
    case audio(bitrate: Int)
    case unknown
}

Ao criar uma instância, os associated values são passados como argumentos:

swift
let photo = MediaFile.image(width: 1920, height: 1080, format: "jpeg")
let clip = MediaFile.video(duration: 120.5, codec: "h264")

O Swift não impõe restrições quanto ao número ou tipos de associated values. Você pode usar genéricos, funções de fechamento e outros enums dentro de associated values. Isso possibilita a construção de estruturas aninhadas complexas.

Os nomes dos parâmetros de associated values são usados como rótulos de argumento ao criar uma instância — isso melhora a legibilidade do código. Ao extrair via switch, os nomes servem como documentação, esclarecendo o significado de cada valor. Essa abordagem torna o código autodocumentado e reduz a probabilidade de erros ao corresponder dados. Isso é especialmente valioso no desenvolvimento em equipe de grandes aplicativos iOS.

Switch com associated values

Switch é a principal forma de extrair associated values. Os valores são vinculados a constantes ou variáveis via let ou var.

swift
func describe(_ file: MediaFile) -> String {
    switch file {
    case .image(let w, let h, let fmt):
        return "Image \(w)x\(h) .\(fmt)"
    case .video(let duration, let codec):
        return "Video \(duration)s, \(codec)"
    case .audio(let bitrate):
        return "Audio \(bitrate)kbps"
    case .unknown:
        return "Unknown format"
    }
}

O Swift suporta correspondência parcial — você pode especificar valores concretos para associated values:

swift
switch file {
case .image(let w, let h, "png"):
    print("Imagem PNG \(w)x\(h)")
case .image(1920, 1080, _):
    print("Imagem Full HD")
default:
    break
}

Usar um curinga (_) permite ignorar associated values desnecessários, e constantes nos casos permitem verificar correspondências com valores específicos.

Associated Values vs Raw Values

Muitos desenvolvedores iniciantes confundem associated values com raw values. São mecanismos diferentes com casos de uso diferentes.

CaracterísticaRaw ValuesAssociated Values
Tipo de DadoUm tipo para todos os casosTipos diferentes para cada caso
Momento de AtribuiçãoNa declaração do enumNa criação da instância
ObrigatoriedadeTodos os casos têm um valorAlguns casos podem não ter valores
CompatibilidadeMutualmente exclusivos — não podem ser usados simultaneamente

De acordo com Swift Evolution, os associated values foram introduzidos no Swift 2.0 como parte do redesenho do enum. Eles fornecem uma abordagem algébrica para tipos, onde cada caso é um construtor separado com sua própria assinatura.

Exemplos práticos de associated values

Os Associated Values são ativamente usados em projetos iOS reais. Vamos considerar três cenários típicos.

Modelagem de respostas de API

swift
enum APIResponse<T: Codable> {
    case success(data: T, cached: Bool)
    case failure(error: Error, retryAvailable: Bool)
    case loading(progress: Double)
}

Máquina de Estados de UI

swift
enum ViewState<T> {
    case idle
    case loading(message: String)
    case loaded(data: T)
    case error(message: String, retryAction: () -> Void)
}

Com associated values, o enum se torna uma ferramenta poderosa para máquinas de estado: cada caso é um estado, os associated values são parâmetros desse estado. O compilador garante que todas as transições sejam tratadas.

Extração via if case e guard case

Para verificar um único caso sem switch, use if case ou guard case. Isso é mais compacto quando você precisa lidar apenas com uma opção.

swift
let error = NetworkError.timeout(seconds: 30)

if case .timeout(let seconds) = error {
    print("Solicitação expirou após \(seconds)s")
}

guard case .httpError(let code, _) = error else {
    return
}
print("Erro HTTP com código \(code)")

Perguntas Frequentes

Um enum pode ter associated values sem parâmetros?

Sim, um caso pode não ter associated values — por exemplo, case unknown. Esses casos se comportam como casos de enum regulares sem dados adicionais. Isso é conveniente para estados marcadores.

Como comparar dois enums com associated values?

O Swift não gera Equatable automaticamente para enums com associated values (antes do Swift 4.2+). Adicione uma implementação explícita de Equatable ou use switch para comparar cada caso sequencialmente.

Pode-se usar associated values em enums recursivos?

Sim, associated values em indirect enums são uma técnica padrão para construir árvores e listas encadeadas. Um caso pode conter um associated value do mesmo tipo marcado com indirect.

Como os associated values diferem das propriedades opcionais em um struct?

Associated Values são type-safe — cada caso tem garantia de ter apenas seus próprios dados. Em um struct com opcionais, cada instância contém todos os campos e são necessárias verificações de nil em tempo de execução.

Os associated values suportam Codable?

O Swift não gera Codable automaticamente para enums com associated values. É necessária uma implementação manual de encode e decode via switch sobre casos usando chaves de codificação personalizadas.

Resumo

  • Associated Values — um mecanismo para anexar dados diferentes a cada caso de enum
  • Sintaxe — declaração de parâmetros entre parênteses após o caso, como funções
  • Extração via switch com vinculação let ou if case
  • Incompatível com raw values — use apenas um
  • Genéricos em associated values tornam o enum um contêiner universal
  • Máquina de Estados — um cenário típico para associated values em iOS

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também