Hashable
- 정수 Hash 값을 제공하는 타입
- 프로토콜
- Set 또는 Dictionary의 Key로 Hashable을 준수하는 모든 타입을 사용할 수 있습니다.
- Dictionary의 Key, Set에서 값을 찾는 기본 방법, 주로 구조체에서 사용
준수
- 구조체의 경우, 저장 프로퍼티는 모두 Hashable을 준수해야 합니다.
- 열거형의 경우, 모든 Associated Values는 모두 Hashable을 준수해야 합니다.
Dictionary는 Hashable
- Swift에서 Dictionary는 Dictionary <KeyType, ValueType> 형태로 쓰입니다.
- Dicttionary의 유일한 제약사항은 반드시 KeyType은 해쉬 가능한 타입 이어야 한다는 것입니다.
- 즉, 그 자체로 유일하게 표현이 가능한 방법을 제공해야 한다는 것입니다.
구현
var identifire = ... // 식별할 수 있는 변수
...
static func ==(lhs: Self, rhs: Self) -> Bool {
return lhs.identifire == rhs.identifire
}
func hash(into hasher: inout Hasher) {
hasher.combine(identifire)
}
- 현재 Swift 5 기준으로는 hashValue를 직접 설정해주는 건 deprecated 되었고
- Hashable protocol에 있었던 func hash(into hasher: inout Hasher)를 사용하라고 합니다.
func hash(into hasher: inout Hasher) {
hasher.combine(identifire)
}
- Hasher는 hashValue를 생성해주는 존재입니다.
- Hasher는 combine이라는 메서드를 가지고 있습니다.
- 이 메서드를 사용해 식별할 수 있는 identifier를 Hasher에게 넘겨주면 됩니다.
내용 출처
https://babbab2.tistory.com/149
https://woongsios.tistory.com/145
https://zeddios.tistory.com/498
'iOS > iOS' 카테고리의 다른 글
nib (0) | 2022.06.18 |
---|---|
Equatable (0) | 2022.06.17 |
Result타입 (0) | 2022.06.13 |
접근 제어자의 종류 (0) | 2022.06.11 |
NSCache와 NSDictionary의 차이를 설명하시오. (0) | 2022.06.09 |
댓글