Conditional Array ...优雅的方式来做到这一点

Conditional Array ...优雅的方式来做到这一点

问题描述:

我有这个数组,其中必须添加或不添加几个元素取决于某些条件。通常我会这样做:Conditional Array ...优雅的方式来做到这一点

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. 

但这看起来很混乱和复杂。

我可以想象我可以创建几种方法来做到这一点,但这需要传递字典,对象和条件数组等等,但都显得比这更蹩脚和更复杂。

你们会如何以更优雅的方式做到这一点?

+3

这看起来并不令人困惑或复杂。我会这样做。 – *foe 2013-05-09 20:06:55

+2

备注 - 请记住,您应用于问题的标签应该与问题的内容相关。这个问题与iOS,iPhone或iPad无关。这是一个Objective-C问题。 – rmaddy 2013-05-09 20:07:01

我只是留下这一个。它已经非常清楚,易于理解。


,你可以,如果你真的很讨厌看到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]]; 

虽然这可能是未来的维护负担。

+0

一个类的类是个好主意!!!!谢谢!!!你有179,000分吗?跆拳道,我出汗血有5K! – SpaceDog 2013-05-09 20:09:48

+0

很好的解决方案。但是,它只能真正节省空白,而不像你提到的那样,可能比它的价值更麻烦。 – *foe 2013-05-09 20:10:44

+0

@RubberDuck与回答问题相比,回答问题要多得多。如果你想获得更多积分,你需要花时间帮助别人。祝你好运。 – rmaddy 2013-05-09 20:17:35