Objective-C Array Literal - 避免添加nil对象

时间:2013-05-06 00:48:08

标签: ios objective-c nsarray

使用新的Objective-C数组文字......

for(UIView * view_ in @ [self.myView01,self.myView1,self.myView2]){         ... }

偶尔其中一个myView *对象为nil,导致错误...

- [__ NSPlaceholderArray initWithObjects:count:]:尝试从对象插入nil对象[0]

问题

在将3个对象添加到数组之前,是否有一种很好的快捷方式来检查3个对象?

2 个答案:

答案 0 :(得分:3)

要明确的是,当您使用文字时,您没有向数组添加对象,而是在初始化数组。你可以这样做:

NSArray *array = @[
    (self.myView01 ? self.myView01 : [NSNull null]),
    (self.myView1 ? self.myView1 : [NSNull null]),
    (self.myView2 ? self.myView2 : [NSNull null]),
];

for (UIView *view_ in array) {
    if (view_ != [NSNull null]) {
        // DO SOMETHING
    }
}

但是在你的循环中你必须将你正在迭代的每个对象与[NSNull null]进行比较。或者,您无法使用文字并构建NSMutableArray。

NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:3];

if (self.myView01) {
    [array addObject:self.myView01];
}

if (self.myView1) {
    [array addObject:self.myView1];
}

if (self.myView2) {
    [array addObject:self.myView2];
}   

for (UIView *view_ in array) {
    // DO SOMETHING
}

这实际上取决于你认为更具可读性的内容。

答案 1 :(得分:1)

如果您的目标是在创建阵列之前检查它们,只需

  NSAssert (self.myView0 && self.myView1 && self.myView2);

的工作原理。如果要创建数组,即使一个值为nil,也要使用:

   (self.myView0 ? self.myView0 : [NSNull null])