我对 nil 对象有同样的问题,并为此写了一个类别NS(Mutable)Array
。所以而不是:
NSMutableArray *array = [[NSMutableArray alloc] init];
if (ob0) [array addObject:ob0];
if (ob1) [array addObject:ob1];
if (ob2) [array addObject:ob2];
if (ob3) [array addObject:ob3];
您可以arrayWithObjectsNil
用于跳过 nil 对象:
id obs[] = { ob0, ob1, ob2, ob3 }; // Assuming obj1 and obj3 are nil.
NSLog(@"%@", [NSArray arrayWithObjectsNil:obs size:sizeof(obs)]);
> ( 0, 2 )
或arrayWithObjectsNull
用于将 nil 对象转换为[NSNull null]
:
NSLog(@"%@", [NSArray arrayWithObjectsNull:obs size:sizeof(obs)]);
> ( 0, "<null>", 2, "<null>" )
对于类别,也可以使用可变性并以这种方式编写:
NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObjectNil:ob0]; // skip, if ob0 is nil
[array addObjectNull:ob1]; // add [NSNull null], if ob1 is nil
...
还有其他具有相同逻辑的方法。
您将在 GitHub 上找到名为Nilus的类别。