如何添加一些跳过nil对象的对象到NSMutableArray?

时间:2013-03-29 19:48:38

标签: objective-c nsarray

我需要一个方法,可以在我的数组中添加一些对象(2-10),跳过这些是nils:

NSMutableArray *arr = [[NSMutableArray alloc] init];
[arr addObjectsSkipNils:obj1, obj2, obj3];

如何以优雅的方式编写此方法?

2 个答案:

答案 0 :(得分:3)

此类别方法可行:

@interface NSMutableArray (MyAdditions)
- (void)addObjectsSkipNilsWithCount:(NSUInteger)count objects:(id)obj, ...;
@end

@implementation NSMutableArray (MyAdditions)

- (void)addObjectsSkipNilsWithCount:(NSUInteger)count objects:(id)obj, ...
{
    va_list ap;
    va_start(ap, obj);
    // First object:
    if (obj != nil)
        [self addObject:obj];
    // Remaining objects:
    for (NSUInteger i = 1; i < count; i++) {
        id myobj = va_arg(ap, id);
        if (myobj != nil)
            [self addObject:myobj];
    }
    va_end(ap);
}
@end

示例:

NSMutableArray *a = [NSMutableArray array];
[a addObjectsSkipNilsWithCount:3 objects:@"foo", nil, @"bar"];
NSLog(@"%@", a);
// Output: ( foo, bar )

您必须明确指定对象数,因为nil不能用作变量参数列表的终止符。 (如果计数大于实际提供的对象数,可能会发生不好的事情!)

答案 1 :(得分:0)

您可以使用:

[yourMainArray removeObjectIdenticalTo:[NSNull null]];

现在,如果您想将其复制到arr,您可以轻松完成。