Middle
Mit kell tenni ahhoz, hogy a felhasználói struktúra kulcs legyen a szótárban?
sobes.tech MI
Válasz az MI-től
A Hashable protokoll implementálása szükséges.
A Hashable protokoll öröklődik az Equatable-től.
Equatable: Megköveteli az egyenlőség operátor==implementálását két példány összehasonlításához.Hashable: Megköveteli ahash(into:)tulajdonság implementálását, amely kiszámítja az példány hash értékét.
Implementációs példa:
struct Coordinate: Hashable {
let x: Int
let y: Int
// MARK: - Equatable
static func == (lhs: Coordinate, rhs: Coordinate) -> Bool {
return lhs.x == rhs.x && lhs.y == rhs.y
}
// MARK: - Hashable
func hash(into hasher: inout Hasher) {
hasher.combine(x)
hasher.combine(y)
}
}
// Használat szótárban
let coordinatesDictionary: [Coordinate: String] = [
Coordinate(x: 0, y: 0): "Origin",
Coordinate(x: 1, y: 1): "Point (1,1)"
]
print(coordinatesDictionary[Coordinate(x: 0, y: 0)]!)
A Hasher a hash érték generálására szolgál. A combine metódus különböző hash-olható értékeket fogad és összefűzi őket, hogy létrehozza a végső hash értéket.