함 정리 하고 넘어갈라고욤
Equatable - 같은지 비교할 수 있어야 함
두 값이 같은지 판단할 수 있게 해주는 프로토콜
== 연산자가 자동 생성되거나, 직접 정의할 수 있다.
struct Person: Equatable {
let name: String
let age: Int
}
let a = Person(name: "Alice", age: 20)
let b = Person(name: "Bob", age: 20)
print(a == b) // false
Equatable 이 없다면 == 비교 자체가 불가능
Hashable - 고유값을 만들어서 저장하거나 찾을 수 있어야 함
Dictionary 나 Set 같은 곳에 객체를 쓸 수 있게 하려면 고유한 해시값이 필요하다.
SwiftUI에서 \.self 를 ID로 쓰려면 Hashable 이 필수다.
struct Person: Hashable {
let name: String
let age: Int
}
let people: Set<Person> = [
Person(name: "Alice", age: 20),
Person(name: "Bob", age: 25)
]
참고: Swift에서 Hashable 을 채택하면 Equatable 도 자동 포함된다. 그래서 == 도 같이 사용 가능하다.
Identifiable - 이 객체의 고유 ID는 이거야
SwiftUI의 List, ForEach 등에서 각 객체를 식별할 수 있도록 해준다.
반드시 id 라는 프로퍼티가 필요하다.
struct Person: Identifiable {
let id: UUID
let name: String
}
let people = [
Person(id: UUID(), name: "Alice"),
Person(id: UUID(), name: "Bob")
]
List(people) { person in
Text(person.name)
}
id 는 UUID, String, Int 등 아무거나 가능하지만 유일해야 한다.
Identifiable 을 채택하면 id: \.id 를 생략할 수 있다.
프로토콜 | 역할 | 사용처 |
Equatable | 두 객체가 같은지 비교 | == , 리스트에서 중복 제거 등 |
Hashable | 고유한 해시값 생성 | Set, Dictionary, \.self 사용 시 |
Identifiable | 객체를 식별할 수 있게 해줌 | SwiftUI의 List, ForEach 등 |
'iOS 관련 공부 > SwiftUI' 카테고리의 다른 글
키 경로 KeyPath (\.) (0) | 2025.04.24 |
---|---|
TextEditor (0) | 2025.04.22 |
배경색 넣기 문제.. (1) | 2025.04.21 |
네비게이션 바 background (0) | 2025.04.21 |
SwiftData 기본적인 내용..이라고 해야할까..? (0) | 2025.04.18 |