2009-09-08 5 views
3

순전히 구현 한 프로토콜을 기반으로 두 Objective-C 객체를 비교하는 방법이 있습니까?프로토콜에 의한 두 객체의 비교/동일성

구체적으로는 MKAnnotation (iPhone mapkit annotations)에 부합하는 두 객체를 비교합니다. 프로토콜을 준수하는 두 개체가 주어지면 프로토콜과 관련하여 동등한 지 판단하고 싶습니다. 이 경우 적어도 coordinate 속성이 동일 함을 의미합니다.

답변

2

CLLocationCoordinate2D은 구조체이기 때문에 MKAnnotation의 두 속성 인 coordinate @ 속성을 ==과 비교할 수 있습니다. 예 :주의와

MKAnnotation *a1; 
MKAnnotation *a2; 

if(a1.coordinate == a2.coordinate) { 
    //coordinates equal 
} 

: 당신이 CLLocationCoordinate2D에서 부동 소수점 값을 비교 케어 (CLLocationCoordinate2D의 위도와 경도 필드 doubletypdef 에드 유형 CLLocation의입니다). 언제나 그렇듯이 두 부동 소수점 값을 비교하는 것은 미묘합니다. 위도와 경도 값을 독립적으로 비교하는 것이 좋습니다 (예 : 절대 차이가 약간의 작은 범위 내에 있음을 확인하는 등). 이 문제에 대한 자세한 내용은 Numerical Recipes을 참조하십시오.

당신이 트릭을 할 것입니다 (다시 저장주의와)

(a1.coordinate == a2.coordinate) && [a1.title isEqualToString:a2.title] && [a1.subtitle isEqualToString:a2.subtitle] 

처럼 뭔가를 모든 속성을 비교합니다.

+0

당신은 정말로 그의 질문에 대답하지 않았습니다. 귀하의 사례는 그의 사례에 따라 다르지만 일반적인 해결책을 원하는 것처럼 보입니다. –

+0

글쎄, 그는 "특별히 MKAnnotation에 부합하는 두 객체를 비교해보고 있습니다."라고 말했기 때문에 나는 적어도 그의 구체적인 질문에 대답했다고 생각합니다. –

+0

나는 동의한다. 나는 당신이 정말로 --conformsToProtocol을 호출하기를 원하지 않는 한, "프로토콜에 기초한 평등을 어떻게 비교할 수 있는지"를 모르겠다. – Wevah

관련 문제