This question already has an answer here:
I am running a for-in loop over an NSMutableArray
. There are instances of Class A
in the array also out of those some are actually instances of its subclass B
.
So If I only want members of subclass B
, I am checking the class of each object I get in an if
condition inside the loop body.
Is it possible that instead of writing something like this,
for(A* obj in collection){
if([obj isKindOfClass:[B class]]){
//take some action.
}
}
I can do something like this?
for(B* obj in collection){
//take some action.
}
Will I get the same result?
Can I do something like this...
No, you can't use the type of the index variable in fast enumeration to select only some of the objects in the collection. If the collection contains different types of objects, you'll have to test each object first. Instead of testing class membership, though, it's often nicer to test for the behavior you're looking for with -respondsToSelector:
or -conformsToProtocol
instead of -isKindOfClass:
.
To my knowledge: no.
The for each loop will traverse every object in the collection, and I don't think you can specify that you only want to traverse a specific type.
To be clearer: The Object you specify: for (MyObject* obj){..}
is a type-cast. So you're telling the object in the collection that they should be/behave as MyObject
来源:https://stackoverflow.com/questions/9289346/access-objects-of-a-specific-type-using-for-in-loop-in-objective-c