プログラムにおいて同一の処理を繰り返し行う場面は少なくありません。その場合ループ処理を記述することになります。ここではObjective-Cにおけるループ処理について説明します。
§1 単純なforループ
以下は単純なループ処理を行っているコードです。配列、ディクショナリの値を取り出しています。
●NSArrayのループ処理
1 2 3 4 5 6 7 8 |
int i; //配列を生成する NSArray *array = [NSArray arrayWithObjects:@"aaa", @"bbb", @"ccc", nil]; //ループ処理 for(i = 0; i < [array count]; i++){ NSLog(@"インデックス: %d, 値: %@", i, [array objectAtIndex:i]); } |
●NSDictionaryのループ処理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
int j; //ディクショナリを生成する NSDictionary *dictArray = [NSDictionary dictionaryWithObjectsAndKeys: @"shanks999", @"name", [NSNumber numberWithInt:100], @"idNumber", nil]; //キーの配列を生成する NSArray *keys = [dictArray allKeys]; //ループ処理 for(j = 0; j < [keys count]; j++){ NSString keyStr = [keys objectAtIndex:j]; //キー配列からキー値を取り出す NSLog(@"キー: %@, 値: %@", keyStr, [dict objectForKey:keyStr]); } |
§2 NSEnumeratorを使用したループ処理
NSEnumeratorクラスを使うと配列やディクショナリの要素を順番に取り出すことができます。NSArrayやNSDictionaryは、各要素にアクセスするための列挙子(NSEnumeratorのインスタンス)を返すメソッドobjectEnumeratorが実装されているのでこれを使用してループ処理を記述することができます。
またNSDictionaryについてはキーの列挙子を返すメソッドkeyEnumeratorを使用することもできます。
●NSArrayのループ処理
1 2 3 4 5 6 7 8 9 |
//配列を生成する NSArray *array = [NSArray arrayWithObjects:@"aaa", @"bbb", @"ccc", nil]; //objectEnumeratorで列挙子を生成する NSEnumerator *enumerator = [array objectEnumerator]; id obj; //nextObjectにて要素を順番に取り出してループ(要素がなくなったらnilが返る) while(obj = [enumerator nextObject]){ NSLog(@"値: %@", obj); } |
●NSDictionaryのループ処理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//ディクショナリを生成する NSDictionary *dictArray = [NSDictionary dictionaryWithObjectsAndKeys: @"shanks999", @"name", [NSNumber numberWithInt:100], @"idNumber", nil]; //objectEnumeratorで値の列挙子を生成する NSEnumerator *objEnumerator = [dictArray objectEnumerator]; id val; //nextObjectにて値の要素を順番に取り出してループ(要素がなくなったらnilが返る) while(val = [objEnumerator nextObject]){ NSLog(@"値: %@", val); } //keyEnumeratorでキーの列挙子を生成する NSEnumerator *keyEnumerator = [dictArray keyEnumerator]; id key; //nextObjectにてキーの要素を順番に取り出してループ(要素がなくなったらnilが返る) while(key = [keyEnumerator nextObject]){ NSLog(@"キー: %@", key); } |
§3 高速列挙によるループ処理
Objective-C 2.0から高速列挙という手法でループ処理が記述できるようになりました。ループ処理をシンプルに記述することができます。
●NSArrayのループ処理
1 2 3 4 5 6 |
//配列を生成する NSArray *array = [NSArray arrayWithObjects:@"aaa", @"bbb", @"ccc", nil]; //ループ処理 for(id obj in array){ NSLog(@"値: %@", obj); } |
●NSDictionaryのループ処理
1 2 3 4 5 6 7 8 9 |
//ディクショナリを生成する NSDictionary *dictArray = [NSDictionary dictionaryWithObjectsAndKeys: @"shanks999", @"name", [NSNumber numberWithInt:100], @"idNumber", nil]; //ループ処理 for(id key in dictArray){ NSLog(@"キー: %@, 値: %@", key, [dictArray objectForKey:key]); } |
Objective-C 基礎 目次
以下の記事も参考にして頂ければと思います。
「Objective-C 基礎(1)- Xcodeのインストールとプロジェクトの作成」
「Objective-C 基礎(2)- Objective-Cの概要とメソッドの呼び出し」
「Objective-C 基礎(3)- クラス定義の方法」
「Objective-C 基礎(4)- クラスの使い方」
「Objective-C 基礎(5)- クラスメソッドとインスタンスメソッド」
「Objective-C 基礎(6)- 変数のスコープとプロパティ」
「Objective-C 基礎(7)- 変数のデータ型」
「Objective-C 基礎(8)- 文字列とNSStringクラス」
「Objective-C 基礎(9)- 可変文字列とNSMutableStringクラス」
「Objective-C 基礎(10)- Objective-Cの配列」
「Objective-C 基礎(11)- Objective-Cの連想配列」
「Objective-C 基礎(12)- ループ処理」
「Objective-C 基礎(13)- プロトコル」