Dérivation de Hashable/Equatable/Comparable
Laissez Swift synthétiser Equatable/Hashable (et Codable) pour les structures et énumérations simples ; implémentez Comparable personnalisé (lexicographique) et hash(into:) manuellement si nécessaire.
Dérivation de Hashable/Equatable/Comparable est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 3. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 3 leçons au total.
Que peut-on synthétiser ?
Swift peut synthétiser automatiquement des conformités courantes pour les types simples :
- égalité : égalité des valeurs
- hachage : clés de dictionnaire ou d’ensemble
- encodage et décodage
Implémentez vous-même la comparaison selon l’ordre lexicographique, ou utilisez l’ordre des cas d’une énumération lorsque cela s’applique.
Synthèse pour les structures
Pour les structures dont les propriétés stockées prennent en charge l’égalité et le hachage, Swift génère automatiquement ces deux conformités.
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) // 1Comparaison des énumérations
Une énumération sans valeurs associées peut obtenir automatiquement la comparaison en fonction de l’ordre des cas.
enum Priority: Comparable { case low, medium, high }
// Comparable is synthesized using case order: low < medium < high
print(Priority.low < .high) // trueComparaison des structures
Pour les structures, écrivez < manuellement. Une simple comparaison lexicographique, d’abord selon last puis selon first, est courante.
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)Égalité et hachage personnalisés
Écrivez == et hash(into:) lorsque l’égalité ou le hachage doit ignorer la mise en forme, par exemple la casse ou les espaces.
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) // 1Bonnes pratiques
Conseils :
- Gardez == et hash(into:) cohérents : des valeurs égales doivent produire le même hachage.
- Privilégiez d’abord la synthèse ; ne passez à une implémentation manuelle que pour une sémantique personnalisée.
- Documentez les règles d’ordre pour la comparaison.
- Utilisez des énumérations sans données associées lorsqu’une échelle ordonnée simple convient.
Liste de vérification de la synthèse
Vérification rapide : que peut synthétiser automatiquement Swift pour des structures ou des énumérations simples ?
Récapitulatif
Récapitulatif : laissez Swift synthétiser l’égalité et le hachage, ainsi que l’encodage et le décodage, pour les modèles simples. Implémentez la comparaison avec des règles lexicographiques claires, ou utilisez l’ordre des cas d’une énumération lorsque c’est possible.
Questions Fréquemment Posées
La leçon « Dérivation de Hashable/Equatable/Comparable » est-elle gratuite ?
Oui — le texte complet de « Dérivation de Hashable/Equatable/Comparable » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 3 leçons au total.
Qu'est-ce que j'apprendrai dans « Dérivation de Hashable/Equatable/Comparable » ?
Laissez Swift synthétiser Equatable/Hashable (et Codable) pour les structures et énumérations simples ; implémentez Comparable personnalisé (lexicographique) et hash(into:) manuellement si nécessaire. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Swift Academy ?
Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 3.
Combien de temps prend la leçon « Dérivation de Hashable/Equatable/Comparable » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?
Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Surcharge d’opérateurs et groupes de précédence
- Indices et indices personnalisés revisités
- Dérivation de Hashable/Equatable/Comparable