反復処理について

Objective-cの反復処理は様々な方法がある。
いくつかを備忘録としてまとめる。

基本

他の言語でも同じような書き方になると思います。
 for (int i = 0; i < count; i++) {
   // 処理
 }

高速反復処理

配列内の値を参照しつつ、特定の箇所で処理を実行することが出来る。
ただしインデックスを入手する術がないのがデメリットか。
 NSArray* array = @[@"1", @"2", @"3", @"4"];
 for (NSString* item in array) {
   // 処理
 }

配列を逆順に処理したい場合は"reverseObjectEnumerator"を使用する
 NSArray* array = @[@"1", @"2", @"3", @"4"];
 for (NSString* item in array.reverseObjectEnumerator) {
   // 処理
 }

ブロックを使用した書き方

要素だけでは無く、インデックスの情報も取得したい場合いいかも。
対象が NSDictionary の場合は要素とキーの情報が同時に手に入ります。
反復処理を終了させたい場合 *stop を YES にすること。
ただし、 break; と違い *stop を YES にした後でも実行中の処理は継続される。
 // id型が指定されている obj の型が確定しているのであれば、その部分をオーバーライドして該当の型に書き換えても良い
 [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
   // 処理
   if (idx == 1) {
     // *stop を YES にするとループを抜ける
     *stop = YES;
   }
 }];

なお、オプションを指定することで配列の逆順から処理することも可能。
 [array enumerateObjectsWithOptions:(NSEnumerationReverse | NSEnumerationConcurrent) 
                                        usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
   // 処理
 }];
最終更新:2014年11月25日 15:51