Question: Is there a better way to see if an object has one of several classes than

```
if ([item isKindOfClass:[NSArray class]] || [item isKindOfClass:[NSNumber class]] || 
[item isKindOfClass:[NSPredicate class]] || [item isKindOfClass:[NSMutableArray class]] 
|| [item isKindOfClass:[NSString class]]) {
   return YES;
};

```

Is there a more graceful way than this? Preferably an inline way that doesn't require creating categories or multiline for loops/arrays.

Answer: 
Perhaps this?

```
NSArray *classes = @[ [NSArray class], [NSNumber class], [NSPredicate class], (etc.)];
for (Class cls in classes) {
    if ([item isKindOfClass:cls]) {
        return YES;
    }
}

```

It's not significantly more succinct, but I think it's easier to read and maintain.

**Edit** : Naturally, you would add a stipulation about no loops or arrays right as I'm writing this up. :)

You might be able to do it with an NSPredicate and an "@any.FUNCTION(isKindOfClass:)" keypath, but I don't think it would be any more graceful; most people would just find it harder to read. I really think an array and a for loop is the way to go here.
Here's what I ended up doing:

```
NSArray *classes = @[ [NSArray class], [NSDictionary class], [NSSet class] ];
NSUInteger *matches = [classes indexesOfObjectsPassingTest:^BOOL(id class, NSUInteger idx, BOOL *stop) {
           return [item isKindOfClass:class]);
       }].count;

```