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 回答