1

で for-in ループを実行していNSMutableArrayます。配列には ClassAのインスタンスがあり、そのうちのいくつかは実際にはそのサブクラスのインスタンスですB

したがって、 subclass のメンバーのみが必要な場合は、ループ本体内の条件でB取得した各オブジェクトのクラスをチェックしています。if

このようなことを書く代わりに、

for(A* obj in collection){
    if([obj isKindOfClass:[B class]]){
        //take some action.
    }
}

私はこのようなことをすることができますか?

   for(B* obj in collection){
      //take some action.
   }

同じ結果が得られますか?

4

2 に答える 2

3

私の知る限り:いいえ。

for each ループはコレクション内のすべてのオブジェクトをトラバースしますが、特定のタイプのみをトラバースするように指定することはできないと思います。

より明確にするために:指定するオブジェクト:for (MyObject* obj){..}は型キャストです。したがって、コレクション内のオブジェクトに、それらが次のように/動作する必要があることを伝えていますMyObject

于 2012-02-15T07:20:48.533 に答える
2

このようなことをしてもいいですか...

いいえ、高速列挙でインデックス変数のタイプを使用して、コレクション内の一部のオブジェクトのみを選択することはできません。コレクションにさまざまなタイプのオブジェクトが含まれている場合は、最初に各オブジェクトをテストする必要があります。-respondsToSelector:ただし、クラスメンバーシップをテストする代わりに、を使用して、または-conformsToProtocolの代わりに、探している動作をテストする方がよい場合がよくあり-isKindOfClass:ます。

于 2012-02-15T07:49:54.733 に答える