Objective-C数组字面量 - 避免添加空对象

3

使用新的Objective-C数组字面量...

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

偶尔,myView*对象中的一个是nil,这会导致错误...

-[__NSPlaceholderArray initWithObjects:count:]: 尝试从objects[0]插入nil对象

问题

有没有一种简单的方法在将它们添加到数组之前检查这3个对象?


你是否考虑将你的视图设置为NSNull - JustSid
2个回答

4

需要明确的是,当你使用文字字面量时,你并没有将对象添加到数组中,而是初始化了一个数组。你可以这样做:

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
如果您的目标是在创建数组之前检查它们,只需
  NSAssert (self.myView0 && self.myView1 && self.myView2);

如果您想创建数组,即使其中一个值为nil,请使用:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接