0Pricing
Swift Academy · Lekcja

Wyprowadzanie Hashable/Equatable/Comparable

Pozwólcie językowi Swift synthesize Equatable/Hashable (oraz Codable) dla prostych structs/enums; implementujcie własne Comparable (leksykograficzne) i ręczne hash(into:) , gdy jest to potrzebne.

Wyprowadzanie Hashable/Equatable/Comparable to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 3 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 3 lekcji w sumie.

Co jest generowane automatycznie?

Swift może automatycznie wygenerować typowe zgodności dla prostych typów:

  • Equatable: równość wartości
  • Hashable: klucze słowników i zbiorów
  • Codable: kodowanie i dekodowanie

Zgodność z Comparable należy zaimplementować samodzielnie (porównanie leksykograficzne) albo, jeśli ma to zastosowanie, polegać na kolejności przypadków wyliczenia.

Generowanie dla struktur

W przypadku struktur, których przechowywane właściwości są zgodne z Equatable/Hashable, Swift automatycznie generuje obie te zgodności.

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 dla wyliczeń

Wyliczenie bez wartości powiązanych może automatycznie uzyskać zgodność z Comparable na podstawie kolejności przypadków.

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

Comparable dla struktur

W przypadku struktur należy ręcznie napisać operator <. Często stosuje się proste porównanie leksykograficzne (najpierw ostatni element, potem pierwszy).

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)

Niestandardowa równość i haszowanie

Zaimplementuj == i hash(into:), gdy równość lub haszowanie powinny pomijać formatowanie (np. wielkość liter i spacje).

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

Najlepsze praktyki

Wskazówki:

  • Zachowaj spójność między == i hash(into:): równe wartości muszą mieć równe wartości skrótu.
  • Najpierw preferuj generowanie automatyczne; implementację ręczną stosuj tylko w przypadku niestandardowej semantyki.
  • Dokumentuj reguły porządkowania dla Comparable.
  • Używaj wyliczeń bez wartości powiązanych, gdy wystarcza prosta uporządkowana skala.

Lista kontrolna generowania

Szybkie sprawdzenie: Co Swift może automatycznie wygenerować dla prostych struktur i wyliczeń?

Podsumowanie

Podsumowanie: Pozwól Swift automatycznie wygenerować zgodności z Equatable/Hashable (a także Codable) dla prostych modeli. Implementuj Comparable za pomocą jasnych reguł porównania leksykograficznego albo, jeśli to możliwe, polegaj na kolejności przypadków wyliczenia.

Często zadawane pytania

Czy lekcja „Wyprowadzanie Hashable/Equatable/Comparable” jest bezpłatna?

Tak — pełny tekst „Wyprowadzanie Hashable/Equatable/Comparable” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 3 lekcji w sumie.

Co nauczysz się w „Wyprowadzanie Hashable/Equatable/Comparable”?

Pozwólcie językowi Swift synthesize Equatable/Hashable (oraz Codable) dla prostych structs/enums; implementujcie własne Comparable (leksykograficzne) i ręczne hash(into:) , gdy jest to potrzebne. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 3.

Ile czasu zajmuje lekcja „Wyprowadzanie Hashable/Equatable/Comparable”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Przeciążanie operatorów i grupy priorytetów
  2. Subscripty i niestandardowe indeksy — powtórzenie
  3. Wyprowadzanie Hashable/Equatable/Comparable
← Powrót do Swift Academy