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.
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) // 1Ordenaçã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) // trueOrdenaçã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) // 1Boas 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.
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
- Sobrecarga de operadores e grupos de precedência
- Subscripts e índices personalizados revisitados
- Derivações de Hashable/Equatable/Comparable