Objective c 条件数组。。。这样做很优雅

Objective c 条件数组。。。这样做很优雅,objective-c,nsmutablearray,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 addOb

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

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.
但这似乎令人困惑和复杂

我可以想象我可以创建几种方法来实现这一点,但这需要传递一个字典、一组对象和条件,等等,但所有这些都比这显得更加蹩脚和复杂


你们怎么能更优雅地做到这一点呢?

我就不谈这个了。它已经非常清晰易懂了


但是如果你真的不喜欢看到
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]];

不过,这可能是未来的维护负担。

我不想管它了。它已经非常清晰易懂了


但是如果你真的不喜欢看到
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]];

不过,这可能是未来的维护负担。

这对我来说并不令人困惑或复杂。我会这样做的。旁注-记住,你应用于问题的标签应该与问题的内容相关。这个问题与iOS、iPhone或iPad无关。这是一个客观的C型问题,我觉得它既不混乱也不复杂。我会这样做的。旁注-记住,你应用于问题的标签应该与问题的内容相关。这个问题与iOS、iPhone或iPad无关。这是一个客观的C问题。班级分类是个好主意!!!!谢谢你有179000分吗?!!!WTF,我在血汗淋漓地跑5公里!很好的解决方案。然而,这只会真正节省空格,不是吗?正如你所说,这可能会带来更多的麻烦。@RubberDuck回答问题比问问题多得多。如果你想获得更多的分数,你需要花时间帮助别人。祝你好运。@trojanfoe-不是真的,它使代码紧凑,更容易阅读。类分类是个好主意!!!!谢谢你有179000分吗?!!!WTF,我在血汗淋漓地跑5公里!很好的解决方案。然而,这只会真正节省空格,不是吗?正如你所说,这可能会带来更多的麻烦。@RubberDuck回答问题比问问题多得多。如果你想获得更多的分数,你需要花时间帮助别人。祝你好运。@trojanfoe-不是真的,它使代码紧凑,更容易阅读。