참고 블로그 : https://babbab2.tistory.com/148
Int, String 끼리는 비교가 되면서 구조체 / 클래스 인스턴스끼리는 일반적으로 비교를 할 수 없는데, 비교를 할 수 있도록 하는 프로토콜.
위와 같은 자료형은 기본적으로 Equatable 프로토콜이 채택되어 있어 자동으로 구현된다.
struct Human {
var name = ""
var age = 0
}
let human1 = Human.init()
let human2 = Human.init()
human1 == human2
위와 같은 코드 작성시 다음의 에러가 발생
//Binary operator '==' cannot be applied to two 'Human' operands
따라서 비교연산 (==)을 하기 위해서는 필수적 구현해야하는 프로토콜
struct Human: Equatable {
var name = ""
var age = 0
}
let human1 = Human.init()
let human2 = Human.init(name: "", age: 19)
human1 == human2 // false
struct Human: Equatable {
var name = ""
var age = 0
static func == (lhs: Self, rhs: Self) -> Bool {
return lhs.age == rhs.age
}
}
et human1 = Human.init()
let human2 = Human.init(name: "", age: 19)
human1 == human2 // false
class Human {
var name = ""
var age = 0
}
extension Human: Equatable {
static func == (lhs: Human, rhs: Human) -> Bool {
return lhs.name == rhs.name && lhs.age == rhs.age
}
}
let human1 = Human.init()
let human2 = Human.init()
human2.age = 10
human1 == human2 // false
enum Gender {
case male
}
let man = Gender.male
let man2 = Gender.male
man == man2 // true
enum Gender: Equatable {
case male(name: String)
}
let man = Gender.male(name: "so")
let man2 = Gender.male(name: "deul")
man == man2 // false