순전히 구현 한 프로토콜을 기반으로 두 Objective-C 객체를 비교하는 방법이 있습니까?프로토콜에 의한 두 객체의 비교/동일성
구체적으로는 MKAnnotation (iPhone mapkit annotations)에 부합하는 두 객체를 비교합니다. 프로토콜을 준수하는 두 개체가 주어지면 프로토콜과 관련하여 동등한 지 판단하고 싶습니다. 이 경우 적어도 coordinate 속성이 동일 함을 의미합니다.
순전히 구현 한 프로토콜을 기반으로 두 Objective-C 객체를 비교하는 방법이 있습니까?프로토콜에 의한 두 객체의 비교/동일성
구체적으로는 MKAnnotation (iPhone mapkit annotations)에 부합하는 두 객체를 비교합니다. 프로토콜을 준수하는 두 개체가 주어지면 프로토콜과 관련하여 동등한 지 판단하고 싶습니다. 이 경우 적어도 coordinate 속성이 동일 함을 의미합니다.
CLLocationCoordinate2D
은 구조체이기 때문에 MKAnnotation
의 두 속성 인 coordinate
@ 속성을 ==
과 비교할 수 있습니다. 예 :주의와
MKAnnotation *a1;
MKAnnotation *a2;
if(a1.coordinate == a2.coordinate) {
//coordinates equal
}
: 당신이 CLLocationCoordinate2D
에서 부동 소수점 값을 비교 케어 (CLLocationCoordinate2D
의 위도와 경도 필드 double
로 typdef
에드 유형 CLLocation
의입니다). 언제나 그렇듯이 두 부동 소수점 값을 비교하는 것은 미묘합니다. 위도와 경도 값을 독립적으로 비교하는 것이 좋습니다 (예 : 절대 차이가 약간의 작은 범위 내에 있음을 확인하는 등). 이 문제에 대한 자세한 내용은 Numerical Recipes을 참조하십시오.
당신이 트릭을 할 것입니다 (다시 저장주의와)
(a1.coordinate == a2.coordinate) && [a1.title isEqualToString:a2.title] && [a1.subtitle isEqualToString:a2.subtitle]
처럼 뭔가를 모든 속성을 비교합니다.
당신은 정말로 그의 질문에 대답하지 않았습니다. 귀하의 사례는 그의 사례에 따라 다르지만 일반적인 해결책을 원하는 것처럼 보입니다. –
글쎄, 그는 "특별히 MKAnnotation에 부합하는 두 객체를 비교해보고 있습니다."라고 말했기 때문에 나는 적어도 그의 구체적인 질문에 대답했다고 생각합니다. –
나는 동의한다. 나는 당신이 정말로 --conformsToProtocol을 호출하기를 원하지 않는 한, "프로토콜에 기초한 평등을 어떻게 비교할 수 있는지"를 모르겠다. – Wevah