反復処理について
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