このコードは MapCallouts デモからのものです。何百もの異なる注釈があったとします。Apple が行った方法では、多くのコードの重複が発生します。
どのクラス インスタンスがデリゲートをトリガーしたかに関係なく、デリゲートをトリガーしたクラスのインスタンスの注釈プロパティにアクセスしたいと考えています。
各注釈を処理し、1 つのユニバーサル メソッドを持つ if ステートメントを記述するよりも簡単な方法はありますか?
- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation
{
// if it's the user location, just return nil.
if ([annotation isKindOfClass:[MKUserLocation class]])
return nil;
// handle our two custom annotations
//
if ([annotation isKindOfClass:[BridgeAnnotation class]]) // for Golden Gate Bridge
{
//do something
}
else if ([annotation isKindOfClass:[SFAnnotation class]]) // for City of San Francisco
{
//do something
}
return nil;
}