本文介绍了优雅的方式来获得一个Objective-C数组特定类型的所有对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道我可以做

for (id obj in array)
{
    if ([obj isKindOfClass:[Elephant class]])
        [elephants addObject:obj];
}

但我觉得必须有这样做的更优雅的方式。我看着滤波阵列,但不能拿出一个好的predicate。思考?

but I feel there must be a more elegant way of doing this. I've looked at filtering arrays but can't come up with a good predicate. Thoughts?

推荐答案

在predicate会是这样

The predicate would be something like

Class ec = [Elephant class];
NSPredicate *elePred = [NSPredicate predicateWithFormat:@"class==%@", ec];
NSArray *elephants = [array filteredArrayUsingPredicate:elePred];

NSPredicate *elePred = [NSPredicate predicateWithFormat:@"self isKindOfClass: %@", ec];

我发现predicates相当,呃..应该说重。我可能会preFER您code这一点。

I have found predicates to be quite, er.. shall we say "Heavy". I would probably prefer your code to this.

如果你只是寻找来调剂你的生活一点,你就可以使用块加少许并发...

If you are just looking to spice up your life a little you could use blocks to add a little concurrency…

    NSMutableArray *results = [NSMutableArray array];
    [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
        if([obj isKindOfClass:[Elephant class]])
            [results addObject:obj];
    }];

这篇关于优雅的方式来获得一个Objective-C数组特定类型的所有对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-30 01:08