3
是否有一種方法可以純粹基於它們實現的協議來比較兩個Objective-C對象。通過協議對兩個對象進行比較/等同
具體而言,我正在比較兩個符合MKAnnotation(iPhone mapkit註釋)的對象。給定符合協議的兩個對象,我想確定它們在協議方面是否相等。在這種情況下,這意味着至少coordinate屬性是相同的。
是否有一種方法可以純粹基於它們實現的協議來比較兩個Objective-C對象。通過協議對兩個對象進行比較/等同
具體而言,我正在比較兩個符合MKAnnotation(iPhone mapkit註釋)的對象。給定符合協議的兩個對象,我想確定它們在協議方面是否相等。在這種情況下,這意味着至少coordinate屬性是相同的。
由於CLLocationCoordinate2D
是一個結構,因此您可以比較兩個MKAnnotation
的coordinate
@屬性與==
。例如:
MKAnnotation *a1;
MKAnnotation *a2;
if(a1.coordinate == a2.coordinate) {
//coordinates equal
}
隨着警告:你所關心比較浮點值在CLLocationCoordinate2D
(的CLLocationCoordinate2D
緯度和經度字段是CLLocation
類型,是typdef
ED作爲double
的)。與往常一樣,比較兩個浮點值的平等性是很微妙的。您可能希望獨立進行經緯度值的更多參與比較(例如檢查其絕對差值是否在一定範圍內)。有關此問題的更多信息,請參閱Numerical Recipes。
如果要比較的所有屬性,像
(a1.coordinate == a2.coordinate) && [a1.title isEqualToString:a2.title] && [a1.subtitle isEqualToString:a2.subtitle]
(再次保存警告),會做的伎倆。
你沒有真正回答他的問題。你的具體到他的例子,但看起來他想要一個通用的解決方案。 – 2009-09-08 21:22:40
嗯,他確實說過「特別是我正在比較符合MKAnnotation的兩個對象」,所以我認爲我至少回答了他的具體問題。 – 2009-09-08 21:36:04
我有點同意;我不確定如何才能真正「根據協議比較平等」,除非您的意思是您首先要在實例上調用-conformsToProtocol:。 – Wevah 2009-09-09 08:04:02