有没有更好的方法来查看某个对象是否具有多个类之一
if ([item isKindOfClass:[NSArray class]] || [item isKindOfClass:[NSNumber class]] ||
[item isKindOfClass:[NSPredicate class]] || [item isKindOfClass:[NSMutableArray class]]
|| [item isKindOfClass:[NSString class]]) {
return YES;
};
有比这更优雅的方式吗?优选地,内联方式不需要为循环/数组创建类别或多行。
答案 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;