macOS/iOS API解説

iOS , Mac アプリケーション開発のために使われる主要フレームワークの日本語情報です。2010年代に書かれた内容です。今後更新はありません。

目次

NSEnumerator

INDEX>Foundation>

列挙子クラス

apple(iOS)
apple(OS X)

解説

「列挙子」と呼ばれるコレクションクラスの一つです。

継承 NSObject
準拠 NSFastEnumeration
  NSObject (NSObject)
フレームワーク /System/Library/Frameworks/Foundation.framework
使用可能 Mac OS X v10.0 以降
iOS 2.0 以降
定義 NSEnumerator.h

概要

Objective-C 2.0ではより高速な高速列挙と呼ばれる機能を使うことができます。
また、Blocksを使い繰り返し処理を行うメソッドがあるクラスもあります。

作成

allocで作成することはなく、NSArrayの-reverseObjectEnumerator-objectEnumeratorなどで返されたオブジェクトを使用します。

他には...
Foundation
NSDictionarykeyEnumeratorobjectEnumerator
NSSetobjectEnumerator
NSCountedSetobjectEnumerator
NSHashTableobjectEnumerator
NSMapTablekeyEnumeratorobjectEnumerator

AppKit
NSTableViewのselectedColumnEnumeratorselectedRowEnumerator


各要素を一つづつ取り出し、各要素に対して処理を行うための列挙子と呼ばれるオブジェクトを表すクラスです。

NSArray,NSDictionary,NSSetの各要素にあるメソッドでNSEnumeratorを作成して、forループ内でNSEnumeratorのメソッド-nextObjectを使って各要素を一つづつ取り出して処理を行います。

NSEnumeratorオブジェクトから要素を取り出すと、その要素はNSEnumeratorオブジェクトから取り除かれます。
全部の要素を取り出した後のNSEnumeratorオブジェクトは空になっているので-nextObjectメソッドを送信するとnilが返されます。
NSMutableArrayNSMutableDictionaryなどの可変のオブジェクトからNSEnumeratorオブジェクトを作成した場合、列挙中に各要素を変更することは避けたほうが良いでしょう。公式ドキュメントにも現在は機能する場合もあるが、将来保障されないと表記されています。

Objective-C 2.0からは、より高速なNSFastEnumerationプロトコルが使えるようになりNSEnumeratorクラスを使う機会は減っています。

iOS4.0からはBlocks構文を使った処理がNSArrayなどにメソッド(– enumerateObjectsUsingBlockなど)が追加されましたので、NSEnumeratorクラスを使って繰り返し処理を行う機会は減っています。

列挙子の生成

他のコレクションオブジェクトのメソッドで作成します。
-objectEnumerator(NSArray)
-reverseObjectEnumerator(NSArray)
-keyEnumerator(NSDictionary)
-objectEnumerator(NSDictionary)
-objectEnumerator(NSSet)

メソッドとプロパティ

未列挙のすべての要素を取得します

- allObjects
まだ列挙されていない要素をすべて配列で返します。
列挙された要素はNSEnumeratorオブジェクトから取り除かれるので、未列挙の要素だけが返されるのです。
このメソッドを呼び出すとすべての要素がNSEnumeratorオブジェクトから取り除かれますので、このあと-nextObjectメソッドを呼び出してもnilが返されます。

次の要素を返します。

– nextObject
NSEnumeratorオブジェクトの要素を一つづつ取り出すためにこのメソッドを呼び出します。

-(void)method002
{
    NSArray *anArray = [NSArray arrayWithObjects:@"aaa",@"bbb",@"ccc",@"ddd",nil];
	
	id obj;
	NSEnumerator *aEnumerator;
    aEnumerator = [anArray objectEnumerator];
    while ((obj = [aEnumerator nextObject]) != nil) {
		NSLog(@"%@",(NSString *)obj);
	}
}

定数

なし

参照

列挙子オブジェクトを得る

– allObjects
– nextObject

 

クラスメソッド