Sobes.tech
Junior — Middle

Ποια είναι η σχέση μεταξύ των πρωτοκόλλων Hashable και Equatable στη γλώσσα Swift;

sobes.tech AI

Απάντηση από AI

Στο Swift, τα πρωτόκολλα Equatable και Hashable είναι στενά συνδεδεμένα, καθώς το Hashable κληρονομεί από το Equatable.

  • Equatable απαιτεί την υλοποίηση του τελεστή ισότητας == για σύγκριση δύο στιγμιότυπων για ισότητα.
  • Hashable επεκτείνει το Equatable και απαιτεί την υλοποίηση της ιδιότητας hashValue (ή της μεθόδου hash(into:)), που επιστρέφει τον κωδικό κατακερματισμού του αντικειμένου.

Η σύνδεση είναι ότι, για τον υπολογισμό του κωδικού κατακερματισμού ενός αντικειμένου, πρέπει να μπορείς να συγκρίνεις αντικείμενα για ισότητα, ώστε να λειτουργούν σωστά οι συλλογές βασισμένες σε κατακερματισμούς (όπως το Set ή το Dictionary).

Παράδειγμα:

struct Person: Hashable {
    var id: Int
    var name: String

    static func == (lhs: Person, rhs: Person) -> Bool {
        return lhs.id == rhs.id
    }

    func hash(into hasher: inout Hasher) {
        hasher.combine(id)
    }
}

Εδώ, το Person συμμορφώνεται με το Equatable και το Hashable, επιτρέποντάς του να χρησιμοποιείται σε πίνακες κατακερματισμού.