두 객체가 동등한지 비교할 수 있게 해줍니다. 클래스, 구조체, 열거형이 Equatable 을 준수하면, 이들의 인스턴스를 '==' 연산자를 사용하여 비교할 수 있습니다.
두 객체가 같은 값이나 상태를 갖는지 확인하는 데 사용합니다.
예시코드
// Equatable
struct Person {
let name: String
}
struct Car: Equatable {
// 객체를 비교하는 메서드
static func == (lhs: Car, rhs: Car) -> Bool {
return lhs.make == rhs.make && lhs.model == rhs.model && lhs.owner.name.lowercased() == rhs.owner.name.lowercased()
}
let make: String
let model: String
let owner: Person
}
let bmw = Car(make: "bmw", model: "5 series", owner: Person(name: "joe"))
let benz = Car(make: "M-benz", model: "E Class", owner: Person(name: "Afraz"))
if bmw == benz {
print("Same")
} else {
print("Different")
}
// Hashable
struct PersonHash {
let name: String
}
struct UserAccount: Hashable {
let accountIdentifier: PersonHash
// 객체의 해시 값 제공 메서드
func hash(into hasher: inout Hasher) {
hasher.combine(accountIdentifier.name)
}
// Equatable 을 상속하므로, 동등성 구현
static func == (lhs: UserAccount, rhs: UserAccount) -> Bool {
return lhs.accountIdentifier.name == rhs.accountIdentifier.name
}
}
struct Post {
let text: String
}
var dictionary = [
UserAccount(accountIdentifier: PersonHash(name: "a")): [
Post(text: "first")
],
UserAccount(accountIdentifier: PersonHash(name: "b")): [
Post(text: "second")
]
]
if let posts = dictionary[UserAccount(accountIdentifier: PersonHash(name: "a"))] {
print(posts)
}