0Pricing
Swift Academy · Lektion

Ableitungen für Hashable/Equatable/Comparable

Lassen Sie Swift Equatable/Hashable (und Codable) für einfache Structs und Enums synthetisieren , implementieren Sie bei Bedarf eigenes Comparable (lexikografisch) und manuelles hash(into:) .

Ableitungen für Hashable/Equatable/Comparable ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 3. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 3 Lektionen.

Was wird synthetisiert?

Swift kann für einfache Typen gängige Konformitäten synthetisieren:

  • Equatable: Wertgleichheit
  • Hashable: Schlüssel für Wörterbücher und Mengen
  • Codable: Kodieren und Dekodieren

Implementieren Sie Comparable selbst, etwa lexikografisch, oder verlassen Sie sich, sofern zutreffend, auf die Reihenfolge der Enum-Cases.

Synthese für Structs

Für Structs, deren gespeicherte Eigenschaften Equatable oder Hashable sind, generiert Swift beide Konformitäten automatisch.

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

Comparable für Enums

Ein Enum ohne zugehörige Werte kann Comparable basierend auf der Reihenfolge der Cases synthetisieren lassen.

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

Comparable für Structs

Schreiben Sie für Structs < manuell. Ein einfacher lexikografischer Vergleich, zuerst nach last und dann nach first, ist üblich.

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)

Benutzerdefinierte Gleichheit und Hashing

Implementieren Sie == und hash(into:), wenn Gleichheit und Hashing Formatierungsunterschiede wie Groß-/Kleinschreibung oder Leerzeichen ignorieren sollen.

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

Bewährte Vorgehensweisen

Tipps:

  • Halten Sie == und hash(into:) konsistent: Gleiche Werte müssen denselben Hash liefern.
  • Bevorzugen Sie zunächst die Synthese und implementieren Sie Konformitäten nur bei benutzerdefinierter Semantik manuell.
  • Dokumentieren Sie die Sortierregeln für Comparable.
  • Verwenden Sie Enums ohne Nutzdaten, wenn eine einfache geordnete Skala ausreicht.

Check zur Synthese

Kurzer Check: Was kann Swift für einfache Structs und Enums automatisch synthetisieren?

Zusammenfassung

Zusammenfassung: Lassen Sie Swift für einfache Modelle Equatable/Hashable und Codable synthetisieren. Implementieren Sie Comparable mit klaren lexikografischen Regeln oder verlassen Sie sich, wenn möglich, auf die Reihenfolge der Enum-Cases.

Häufig gestellte Fragen

Ist die Lektion „Ableitungen für Hashable/Equatable/Comparable“ kostenlos?

Ja — der vollständige Text von „Ableitungen für Hashable/Equatable/Comparable“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 3 Lektionen.

Was lerne ich in „Ableitungen für Hashable/Equatable/Comparable“?

Lassen Sie Swift Equatable/Hashable (und Codable) für einfache Structs und Enums synthetisieren , implementieren Sie bei Bedarf eigenes Comparable (lexikografisch) und manuelles hash(into:) . Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Swift Academy zu starten?

Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 3.

Wie lange dauert die Lektion „Ableitungen für Hashable/Equatable/Comparable“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?

Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Operatorüberladung und Precedence-Groups
  2. Subscripts und benutzerdefinierte Indizes – Vertiefung
  3. Ableitungen für Hashable/Equatable/Comparable
← Zurück zu Swift Academy