스위프트 배열에 객체의 특정 인스턴스가 포함되어 있는지 확인하는 방법은 무엇입니까? 이 간단한 예제를 고려하십시오스위프트 배열에 객체의 인스턴스가 포함되어 있는지 확인하십시오.
class Car {}
let mazda = Car()
let toyata = Car()
let myCars = [mazda, toyata]
myCars.contains(mazda) // ERROR!
내 조사가 Car
클래스는 Equatable
프로토콜을 채택해야 결론을 내게 할 수있다.
class Car: Equatable {
static func ==(lhs: Car, rhs: Car) -> Bool {
return true
}
}
다음 myCars.contains(mazda)
실제로 true
를 반환 않습니다 경우 것 같다.
그러나 ==
의 구현은 분명히 내가 원하는 것이 아닙니다. 내가 정말로 돌려 주길 바란 것은 질문에 대한 대답입니다 : lhs
과 rhs
은 같은 Car
인스턴스입니까?
정말 그렇게 복잡한가요?
감사합니다.
* "lhs와 rhs는 같은 Car 인스턴스입니까?"- 아니요, 질문은 "lhs와 rhs가 동일한 동등한 자동차입니까?"라는 질문을해야합니다. 그들은 똑같아지기 위해 똑같은 존재 일 필요는 없습니다. – rmaddy
아니, 그건 내가 원하는 것이 아니야. 내 경우에는 (자동차가있는 장난감 사례가 아닌), 나는 그들이 실제로 같은 경우인지 알고 싶다. 어쨌든 문제는 === 연산자로 해결됩니다. 그 전에는 들어 본 적이 없어요. –
그것이 작동하는 방식이 아닙니다. 당신은'Equatable' 프로토콜 (따라서 Hashable 프로토콜)의 의미를 위반하고 있습니다. 당신은 당신의 코드에서 버그를 추적하기 위해 이상하고 아주 어려운 일을 일으킬 것입니다. – rmaddy