使用新的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])
NSNull
? - JustSid