3

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

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

有时 myView* 对象之一是 nil,这会导致错误...

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

问题

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

4

2 回答 2

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
}

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

于 2013-05-06T04:40:44.950 回答
1

如果您的目标是在简单地创建数组之前检查它们

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

作品。如果您想创建数组,即使使用了一个值nil

   (self.myView0 ? self.myView0 : [NSNull null])
于 2013-05-06T01:07:40.720 回答