我问过类似的问题,但他们都关心使用一个块来表示数组的特定值。这有点不同,我想在初始化时使用块填充数组的值。除了子类化 NSArray 来做到这一点之外,还有另一种类似的方法:在这种情况下,我用一周中的几天填充一个数组,今天总是在中间。我这样做的“经典”方式是:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEEE"];
NSMutableArray *test = [[NSMutableArray alloc] init];
for (int i = -3; i < 4; i++) {
[test addObject:[dateFormatter stringFromDate:[[NSDate date] dateByAddingTimeInterval:60*60*24*i]]];
}
理想情况下,我想做的是初始化一个数组并用使用块动态分配的值填充它,如下所示:
NSArray *array = [[NSArray alloc] initWithObjects:^(){ for (int i = -3; i < 4; i++) {
return [dateFormatter stringFromDate:[[NSDate date] dateByAddingTimeInterval:60*60*24*i]];
}}, nil];
现在上面的代码什么都没有创建,这是正确的,因为方法 initWithObjects 需要对象而不是块,此外,块将执行一次,只返回一个对象。那么这是可能/可行的,还是我需要继承 NSArray 来创建类似 initWithBlock 的方法?