iOS6またはOSX10.8をターゲットにしていない場合でも、添え字を機能させるのは非常に簡単です。必要なメソッドを、添え字を付けるクラスをカテゴリとして追加し、それらのメソッドを適切に実装するだけです。したがって、次のクラスにメソッドを追加します。
NSArray
:- (id)objectAtIndexedSubscript: (NSUInteger)index;
NSMutableArray
:- (void)setObject: (id)obj atIndexedSubscript: (NSUInteger)index;
NSDictionary
:- (id)objectForKeyedSubscript: (id)key;
NSMutableDictionary
:- (void)setObject: (id)obj forKeyedSubscript: (id)key;
これを実装するのは、クラスに適切なメソッドを呼び出すだけです。たとえば、NSArrayに添え字を実装するには、次のように実装します。
- (id) objectAtIndexedSubscript:(NSUInteger)index{
return [self objectAtIndex:index];
}
私が見ることができる唯一の欠点は、添え字を使用することを意図しているクラスにカテゴリをインポートする必要があることです。もちろん、#import
プレフィックスヘッダー(通常はファイル:)にを含めることで、この要件を回避できます<appname>-Prefix.pch
。(それを指摘してくれたJoshCaswellに感謝します)。
利点の1つは、必要に応じて添え字の方法を変更できることです。たとえば、Appleでは、添え字を使用してNSMutableArrayにオブジェクトを追加/削除することは許可されていませんが、これは簡単に実行できます。
- (void) setObject:(id)obj atIndexedSubscript:(NSUInteger)index{
if (index < self.count){
if (obj)
[self replaceObjectAtIndex:index withObject:obj];
else
[self removeObjectAtIndex:index];
} else {
[self addObject:obj];
}
}