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, επιτρέποντάς του να χρησιμοποιείται σε πίνακες κατακερματισμού.