Swift Academy · Aula

Derivações de Hashable/Equatable/Comparable

Permita que o Swift synthesize Equatable/Hashable (e Codable) para structs/enums simples; implemente Comparable personalizado (lexicográfico) e hash(into:) manual quando necessário.

Aula 3 de 38 etapas

Derivações de Hashable/Equatable/Comparable é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 3 de 3. 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 3 aulas no total.

O que é gerado automaticamente?

O Swift pode gerar automaticamente conformidades comuns para tipos simples:

  • Igualdade: igualdade de valores
  • Hash: chaves de dicionários/conjuntos
  • Codificação: codificação e decodificação

Implemente a ordenação por conta própria (lexicograficamente) ou use a ordem dos casos de uma enumeração quando aplicável.

Geração automática para estruturas

Para estruturas cujas propriedades armazenadas permitem igualdade ou hash, o Swift gera ambos automaticamente.

struct Point: Equatable, Hashable {
    var x: Int
    var y: Int
    // No extra code: Equatable & Hashable are synthesized
}
let p1 = Point(x: 1, y: 2)
let p2 = Point(x: 1, y: 2)
print(p1 == p2)                 // true
let set: Set<Point> = [p1, p2]  // Hashable works; duplicates coalesce
print(set.count)                // 1

Ordenação para enumerações

Uma enumeração sem valores associados pode obter automaticamente a ordenação com base na ordem dos casos.

enum Priority: Comparable { case low, medium, high }
// Comparable is synthesized using case order: low < medium < high
print(Priority.low < .high)  // true

Ordenação para estruturas

Para estruturas, escreva < manualmente. Uma comparação lexicográfica simples (último elemento e depois primeiro) é comum.

struct Person: Comparable, Hashable {
    let last: String
    let first: String
    static func < (lhs: Person, rhs: Person) -> Bool {
        if lhs.last != rhs.last { return lhs.last < rhs.last }
        return lhs.first < rhs.first
    }
}
let a = Person(last: "Doe", first: "Ana")
let b = Person(last: "Doe", first: "Max")
print(a < b)   // true (Ana before Max)

Igualdade e hash personalizados

Implemente a igualdade e o cálculo de hash quando eles precisarem ignorar a formatação (por exemplo, maiúsculas, minúsculas e espaços).

struct FileID: Hashable, Equatable {
    let path: String
    // Normalize case/trim when hashing & comparing
    static func == (l: FileID, r: FileID) -> Bool {
        l.path.lowercased().trimmingCharacters(in: .whitespaces) ==
        r.path.lowercased().trimmingCharacters(in: .whitespaces)
    }
    func hash(into hasher: inout Hasher) {
        hasher.combine(path.lowercased().trimmingCharacters(in: .whitespaces))
    }
}
let f1 = FileID(path: " Readme.md ")
let f2 = FileID(path: "readme.md")
print(f1 == f2)                 // true
print(Set([f1, f2]).count)      // 1

Boas práticas

Dicas:

  • Mantenha a igualdade e o cálculo de hash consistentes: valores iguais devem produzir hashes iguais.
  • Prefira primeiro a geração automática; recorra à implementação manual somente para semânticas personalizadas.
  • Documente as regras de ordenação.
  • Use enumerações sem dados associados quando uma escala ordenada simples for suficiente.

Lista de verificação da geração automática

Verificação rápida: o que o Swift pode gerar automaticamente para estruturas e enumerações simples?

Recapitulação

Recapitulação: deixe o Swift gerar automaticamente a igualdade/capacidade de hash (e a codificação) para modelos simples. Implemente a ordenação com regras lexicográficas claras ou use a ordem dos casos de uma enumeração quando possível.

Grátis para começar

Aprenda Swift com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
122
Aulas
409

Perguntas Frequentes

A aula “Derivações de Hashable/Equatable/Comparable” é grátis?

Sim — o texto completo de “Derivações de Hashable/Equatable/Comparable” é 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 3 aulas no total.

O que vou aprender em “Derivações de Hashable/Equatable/Comparable”?

Permita que o Swift synthesize Equatable/Hashable (e Codable) para structs/enums simples; implemente Comparable personalizado (lexicográfico) e hash(into:) manual quando necessário. 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 3.

Quanto tempo leva a aula “Derivações de Hashable/Equatable/Comparable”?

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. Sobrecarga de operadores e grupos de precedência
  2. Subscripts e índices personalizados revisitados
  3. Derivações de Hashable/Equatable/Comparable
← Voltar para Swift Academy