条件数组...优雅的方式来做到这一点

时间:2013-05-09 20:03:48

标签: objective-c nsmutablearray

我有这个数组,其中必须添加或不添加几个元素,具体取决于某些条件。通常我会做那样的事情:

NSMutableArray *myArray = [[NSMutableArray alloc] init];
[myArray addObject:@"aaa"];
[myArray addObject:@"bbb"];

if (flag)
  [myArray addObject:@"flag"];

if (box)
  [myArray addObject:@"box"];

[myArray addObject:@"xxx"];

if (x > 5)
  [myArray addObject:@"smaller"];

if ([self isMenuVisible])
  [myArray addObject:@"menu"];

... etc.

但这似乎令人困惑和复杂。

我可以想象我可以创建的几种方法来做到这一点,但这会涉及传递字典,对象和条件数组等,但所有方法看起来都比这更蹩脚和更复杂。

你们怎么以更优雅的方式做到这一点?

1 个答案:

答案 0 :(得分:4)

我会把这件事留下来。它已经非常清晰易懂了。


如果你真的讨厌看if,你可以定义一个类别方法。

// Not tested.
@implementation NSMutableArray (ext)
-(void)addObject:(NSObject*)obj when:(BOOL)condition {
    if (condition) {
        [self addObject:obj];
    }
}
@end

....

[myArray addObject:@"aaa"];
[myArray addObject:@"bbb"];
[myArray addObject:@"flag" when:flag];
[myArray addObject:@"box" when:box];
[myArray addObject:@"xxx"];
[myArray addObject:@"smaller" when:(x > 5)];
[myArray addObject:@"menu" when:[self isMenuVisible]];

这可能是将来的维护负担。