使用新的Objective-C数组文字......
for(UIView * view_ in @ [self.myView01,self.myView1,self.myView2]){ ... }
偶尔其中一个myView *对象为nil,导致错误...
- [__ NSPlaceholderArray initWithObjects:count:]:尝试从对象插入nil对象[0]
问题
在将3个对象添加到数组之前,是否有一种很好的快捷方式来检查3个对象?
答案 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])