С CLLocationCoordinate2D
является структурой, вы можете сравнить coordinate
@properties двух MKAnnotation
s с ==
. Пример:
MKAnnotation *a1;
MKAnnotation *a2;
if(a1.coordinate == a2.coordinate) {
//coordinates equal
}
С предостережением: вы заботитесь сравнения значений с плавающей точкой в CLLocationCoordinate2D
(широта и долгота полей CLLocationCoordinate2D
имеют тип CLLocation
, который typdef
ред, как double
). Как всегда, сравнение двух значений с плавающей запятой для равенства чревато тонкостью. Возможно, вы захотите выполнить более активное сравнение значений широты и долготы независимо (например, проверка затухания, их абсолютная разница находится в небольшом диапазоне). См. Numerical Recipes для получения дополнительной информации по этой проблеме.
Если вы хотите сравнить все свойства, что-то вроде
(a1.coordinate == a2.coordinate) && [a1.title isEqualToString:a2.title] && [a1.subtitle isEqualToString:a2.subtitle]
(опять-таки с оговоркой сохранения) будет делать трюк.
Вы не ответили на его вопрос. Ваш характер специфичен для его примера, но похоже, что он хочет общее решение. –
Ну, он сказал: «В частности, я смотрю на сравнение двух объектов, соответствующих MKAnnotation», поэтому я думаю, что, по крайней мере, ответил на его конкретный вопрос. –
Я согласен; Я не уверен, как вы можете «сравнить для равенства на основе протокола», если только вы просто не хотите, чтобы вы вызывали -conformsToProtocol: сначала в экземпляре. – Wevah