2

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

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

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

4

2 回答 2

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循环是这里的方法。

于 2013-03-25T06:17:24.570 回答
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;
于 2013-03-25T06:45:37.160 回答