使用isKindOfClass简单地使用MULTIPLE类检查来评估对象

时间:2013-03-25 06:10:43

标签: ios objective-c

有没有更好的方法来查看某个对象是否具有多个类之一

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

有比这更优雅的方式吗?优选地,内联方式不需要为循环/数组创建类别或多行。

2 个答案:

答案 0 :(得分:4)

也许这个?

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

它没有明显更简洁,但我认为它更容易阅读和维护。

编辑:当然,在我写这篇文章的时候,你会添加一个关于没有循环或数组的规定。 :)

您可以使用NSPredicate和“@ any.FUNCTION(isKindOfClass :)”键路径来完成它,但我认为它不会更优雅;大多数人会发现它更难阅读。我真的认为数组和for循环是这里的方式。

答案 1 :(得分:0)

这是我最终做的事情:

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