Sobes.tech
Junior — Middle

Jakie ograniczenia i wymagania muszą spełniać obiekty, aby mogły być używane jako elementy tablic haszujących lub struktur haszujących w Swift?

sobes.tech AI

Odpowiedź od AI

W Swift, aby obiekt mógł być używany jako element tabeli haszującej (np. klucz w słowniku lub element zbioru), musi spełniać protokół Hashable.

Wymagania:

  • Obiekt musi implementować metodę hash(into:), która łączy wartości właściwości w celu obliczenia hasza.
  • Obiekt musi implementować operator równości == (protokół Equatable), aby poprawnie porównywać elementy.

Przykład:

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

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

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

var peopleSet = Set<Person>()
peopleSet.insert(Person(id: 1, name: "Иван"))

W związku z tym obiekty muszą mieć stabilny i poprawnie zaimplementowany hash i porównanie, aby poprawnie działały w strukturach hashujących.