2011-12-13 2 views
1

高速列挙:私はこのサイト上でこのようなコードを発見した無理解

初心者の質問には
- (NSArray *) valueForKey:(id)key { 
    NSMutableArray *retval = [NSMutableArray array]; 

    for (NSObject *object in self) { 
    [retval addObject:[object valueForKey:key]]; 
    } 

    return self; 
} 

申し訳ありませんが、私は自分のコレクションだけで対象ではないとして、高速、そこに列挙されているかを把握することはできません。

+0

で定義されているクラスに呼び出されている次のような方法につながる

for (id obj in self) { 

を呼び出すことができるだろう何か役に立つ。例えば、 'retval'配列を構築し、それを返さず、代わりに' self'を返します。 –

+0

ちょうど参照のために、このコードはhttp://stackoverflow.com/a/1164072/からあるようです。 –

答えて

4

NSFastEnumeration protocolに準拠して、任意のクラスがin構文で列挙することができます。投稿したコードスニペットは、クラスがプロトコルによって定義された-countByEnumeratingWithState:objects:count:メソッドも実装しており、そのメソッドが反復処理するNSObjectインスタンスの配列を返すことを示しています。

2

そのfor (... in ...)ループ。

NSMutableArrayは、NSFastEnumerationプロトコルに準拠している必要があります。

参照:http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/Chapters/ocFastEnumeration.html

+0

for(key in dictionary) 私は辞書を列挙しているとき何が起こっているのか理解していますが、自分を列挙すると何が起こっていますか? – user801255

+0

@ user801255 - 辞書でもサポートされているようです。 –

0

例の場合は、selfNSFastEnumerationを実装するクラスのインスタンスであることを意味します。これは、迅速な列挙を可能にするために採用する必要があるプロトコルです。

たとえば、独自のカスタムオブジェクトを作成し、そのプロトコルを実装することができます。そして、そのクラス内で、あなたは、これはこれが何を表示されませんNSFastEnumerationプロトコル

countByEnumeratingWithState:objects:count: 
関連する問題