我有詢問號的NSArray
數據源的方法;其中一些可能是nil
,但我需要返回每個值。創建一個NSArray來表示的值,其包括零
的方法可能是這樣的:
- (NSArray *)configurationValues:(Configuration *)configuration {
....
return [NSArray arrayWithObjects:value1, value2, value3, value4, nil];
}
如果value3
爲nil
,我不得不返回{2,3,(對象是無),3}。
偏離當然,我收到了例外,因爲我無法插入nil
對象。
什麼我能做的就是檢查每一個對象,並插入一些空號或NSNull
,但這對我來說似乎是樣板,並沒有真正優雅。
我試圖創建NSArray
一個類別,它會用別的東西代替所有nil
值,以避免例外:
@implementation NSArray (Nullable)
+ (instancetype)arrayWithObjectsSafe:(id)firstObj, ... {
NSMutableArray *array = [NSMutableArray array];
va_list args;
id object;
va_start(args, firstObj);
while((object = va_arg(args, id))) {
if (object) {
[array addObject:object];
} else {
// Insert dummy element // stuck here
[array addObject:[NSNull null]];
}
NSLog(@"OBJECT %@", object);
}
va_end(args);
return [NSArray arrayWithArray:array];
}
@end
我不是很熟悉的可變參數的方法,和我被困這裏因爲while
循環跳過了nil
值,所以最終數組僅包含nil
之前的元素。
我能解決這個問題,或者是有NSArray
現有辦法不扔試圖插入nil
對象時例外嗎?