0

我问过类似的问题,但他们都关心使用一个块来表示数组的特定值。这有点不同,我想在初始化时使用块填充数组的值。除了子类化 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 的方法?

4

1 回答 1

3

你不需要继承 NSArray 来给它添加一个方法。一个类别就可以了。

当前的任何 NSArray 方法都无法实现您想要的。而且它不会像您在问题中起草的那样完全有效,因为该语言不支持来自块(或函数或方法)的多个返回值。因此,您必须编写一个实际创建 NSArray 并返回它的块。但是,如果您这样做,您不妨忽略该块并立即创建数组。

于 2012-06-13T12:38:54.607 回答