Equatable synthétisé
Obtenez == automatiquement et personnalisez-le si nécessaire.
Equatable synthétisé est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. 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 4 leçons au total.
Qu’est-ce qu’Equatable ?
Equatable est le protocole qui fournit l’opérateur == à un type. La conformité vous permet de comparer deux valeurs pour vérifier leur égalité et de les utiliser avec contains, firstIndex, etc.
Conformité automatique
Pour une structure dont toutes les propriétés stockées sont Equatable, Swift synthétise == pour vous — il vous suffit de déclarer la conformité :
struct Point: Equatable {
let x: Int
let y: Int
}
print(Point(x: 1, y: 2) == Point(x: 1, y: 2)) // true
print(Point(x: 1, y: 2) == Point(x: 9, y: 2)) // falseFonctionnement de la synthèse
L’opérateur == généré compare chaque paire de propriétés stockées. Elles doivent toutes être égales pour que les valeurs le soient :
struct User: Equatable {
let name: String
let age: Int
}
let a = User(name: "Ann", age: 30)
let b = User(name: "Ann", age: 31)
print(a == b) // false (age differs)Utiliser == dans les collections
Equatable permet d’utiliser de nombreuses opérations sur les tableaux :
struct Tag: Equatable { let name: String }
let tags = [Tag(name: "a"), Tag(name: "b")]
print(tags.contains(Tag(name: "b"))) // true
print(tags.firstIndex(of: Tag(name: "a"))!) // 0Les énumérations sont aussi Equatable
Les énumérations bénéficient elles aussi de la synthèse de Equatable. Les énumérations sans valeurs associées sont Equatable même sans déclaration ; avec des valeurs associées, déclarez la conformité, et ces valeurs seront également comparées.
Énumération Equatable avec valeurs associées
Les valeurs associées participent à la comparaison :
enum Status: Equatable {
case active
case error(code: Int)
}
print(Status.error(code: 404) == Status.error(code: 404)) // true
print(Status.error(code: 404) == Status.error(code: 500)) // falseTypes imbriqués
La synthèse se compose : une structure contenant des membres Equatable peut elle-même être synthétisée :
struct Line: Equatable {
let start: Int
let end: Int
}
struct Shape: Equatable {
let lines: [Line]
}
print(Shape(lines: [Line(start: 0, end: 1)]) == Shape(lines: [Line(start: 0, end: 1)])) // trueQuand la synthèse échoue
Si une propriété stockée n’est pas Equatable, la synthèse n’est pas disponible et vous devez écrire vous-même == (ce point sera abordé plus tard) :
struct Box: Equatable {
let id: Int
static func == (l: Box, r: Box) -> Bool { l.id == r.id }
}
print(Box(id: 1) == Box(id: 1)) // trueLes classes ne sont pas synthétisées automatiquement
Les types de référence ne bénéficient pas de la synthèse de == ; vous devez l’implémenter vous-même (en comparant l’identité ou les champs) :
final class Account: Equatable {
let id: Int
init(id: Int) { self.id = id }
static func == (l: Account, r: Account) -> Bool { l.id == r.id }
}
print(Account(id: 7) == Account(id: 7)) // true!= est dérivé automatiquement
Une fois que == existe, != est automatiquement dérivé comme sa négation :
struct Color: Equatable { let hex: String }
print(Color(hex: "#fff") != Color(hex: "#000")) // trueEquatable dans le code générique
Equatable permet aux fonctions génériques de comparer des éléments — de nombreux algorithmes l’exigent :
func allSame<T: Equatable>(_ xs: [T]) -> Bool {
guard let first = xs.first else { return true }
return xs.allSatisfy { $0 == first }
}
print(allSame([2, 2, 2])) // true
print(allSame(["a", "b"])) // falseVérification rapide
Pour quel type Swift synthétise-t-il automatiquement == lorsque vous déclarez Equatable ?
Récapitulatif
Vous avez découvert Equatable :
Equatablefournit==(ainsi que!=automatiquement)- Les structures et énumérations dont les membres sont Equatable bénéficient de la synthèse de
== - Permet d’utiliser
contains,firstIndex(of:), etc. - Les classes et les membres non-Equatable nécessitent un
==écrit manuellement
Ensuite : Hashable.
Apprends Swift avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 122
- Leçons
- 409
Questions Fréquemment Posées
La leçon « Equatable synthétisé » est-elle gratuite ?
Oui — le texte complet de « Equatable synthétisé » 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 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Equatable synthétisé » ?
Obtenez == automatiquement et personnalisez-le 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 1 sur 4.
Combien de temps prend la leçon « Equatable synthétisé » ?
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
- Equatable synthétisé
- Hashable et hash(into:)
- Comparable et tri
- Sémantique d’égalité personnalisée