使用新的 Objective-C 数组字面量...
for (UIView *view_ in @[self.myView01, self.myView1, self.myView2]) { ... }
有时 myView* 对象之一是 nil,这会导致错误...
-[__NSPlaceholderArray initWithObjects:count:]: 尝试从 objects[0] 插入 nil 对象
问题
在将 3 个对象添加到数组之前,是否有一种很好的快捷方式来检查它们?
使用新的 Objective-C 数组字面量...
for (UIView *view_ in @[self.myView01, self.myView1, self.myView2]) { ... }
有时 myView* 对象之一是 nil,这会导致错误...
-[__NSPlaceholderArray initWithObjects:count:]: 尝试从 objects[0] 插入 nil 对象
问题
在将 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
}
这实际上取决于您认为更具可读性的内容。
如果您的目标是在简单地创建数组之前检查它们
NSAssert (self.myView0 && self.myView1 && self.myView2);
作品。如果您想创建数组,即使使用了一个值nil
:
(self.myView0 ? self.myView0 : [NSNull null])