Equatable
요약
Equatable Protocol을 적용하여 Custom Type끼리의 비교가 가능하다
기본 개념
A type that can be compared for value equality.
값이 동일한지 비교할 수 있는 Type
A type that can be compared for value equality.
값이 동일한지 비교할 수 있는 Type
Swift 공식 문서에 정의되어있는 Equatable의 개념이다.
Swift 기본 Type들은 대부분 Equatable을 따른다.
Equatable을 따르는 Type들은 같다(==
)와 같지 않다(!=
) 연산자를 사용할 수 있다.
아래 코드와 같이 말이다.
var c1 = "ABC"
var c2 = "ABC"
var c3 = "XZY"
print(c1 == c2 ? true : false)
// true
print(c1 != c2 ? true : false)
// false
print(c2 == c3 ? true: false)
// false
활용
기본적으로 Swift에서 Class, Structure, Enum과 같은 CustomType은 서로 비교 불가하다.
class StreetAddress {
let number: String
let street: String
init(_ number: String, _ street: String) {
self.number = number
self.street = street
}
}
print(StreetAddress("1", "A") == StreetAddress("1", "A") ? true : false)
//Error: binary operator '==' cannot be applied to two 'StreetAddress' operands
다음과 같이 StreetAddress에 대하여 ==
연산자 적용이 불가능하다는 Error가 뜬다.
하지만 이러한 상황에서 Class, Structure, Enum등을 비교하고 싶을 경우, Equatable을 사용하면 된다.
Equatable은 Protocol이다.
위에서 말했듯이 Equatable을 따르는 Type들은 서로 같은지 비교할 수 있다.
한마디로 Equatable을 적용할 경우 Class, Structure, Enum 등을 비교할 수 있다.
class StreetAddress: Equatable {
static func == (lhs: StreetAddress, rhs: StreetAddress) -> Bool {
return
lhs.number == rhs.number &&
lhs.street == rhs.street
}
let number: String
let street: String
init(_ number: String, _ street: String) {
self.number = number
self.street = street
}
}
print(StreetAddress("1", "A") == StreetAddress("1", "A") ? true : false)
// true
print(StreetAddress("1", "A") != StreetAddress("1", "A") ? true : false)
// false
print(StreetAddress("1", "A") == StreetAddress("2", "B") ? true : false)
// false
Euatable을 적용하고 해당 프로토콜에서 요구하는 static func == (lhs: Self, rhs: Self) -> Bool
을 작성했더니 StreetAddress
Class끼리 비교가 가능해졌다.
static func == (lhs: Self, rhs: Self) -> Bool
내부에는 비교할 Type의 모든 Property들이 같은지 확인하여 반환하면 된다.
Author And Source
이 문제에 관하여(Equatable), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mo_nireu/Equatable저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)