Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSArray初始化并动态填充块_Objective C_Nsarray_Objective C Blocks - Fatal编程技术网

Objective c NSArray初始化并动态填充块

Objective c NSArray初始化并动态填充块,objective-c,nsarray,objective-c-blocks,Objective C,Nsarray,Objective C Blocks,我问过类似的问题,但它们都涉及使用块来表示数组的特定值。这有点不同,我想在初始化时使用块填充数组的值。除了将NSArray子类化以执行此操作外,是否还有其他类似的方法: 在这个场景中,我填充了一个星期中的数组,今天总是在中间。我的“经典”做法是: NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"EEEE"]; NSMutableArray *t

我问过类似的问题,但它们都涉及使用块来表示数组的特定值。这有点不同,我想在初始化时使用块填充数组的值。除了将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]]];
}
NSDateFormatter*dateFormatter=[[NSDateFormatter alloc]init];
[日期格式化程序setDateFormat:@“EEEE”];
NSMUTABLEARRY*测试=[[NSMUTABLEARRY 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];
NSArray*array=[[NSArray alloc]initWithObjects:^(){for(int i=-3;i<4;i++){
返回[dateFormatter stringFromDate:[[NSDate date]dateByAddingTimeInterval:60*60*24*i]];
}},无];

现在,上面的代码什么也不创建,这是正确的,因为initWithObjects方法需要对象而不是块,而且,块将执行一次,只返回一个对象。那么这是可能的/可行的,还是我需要将NSArray子类化以创建类似initWithBlock的方法?

您不需要将NSArray子类化以向其添加方法。一个类别就可以了


使用任何当前的NSArray方法都不可能实现您想要的。而且它不会像您在问题中草拟的那样起作用,因为该语言不支持来自块(或函数或方法)的多个返回值。因此,您必须编写一个块来实际创建NSArray并返回它。但是如果您这样做,那么您最好省去该块,直接创建数组。

您不需要为NSArray创建子类来为其添加方法。一个类别就可以了


使用任何当前的NSArray方法都不可能实现您想要的。而且它不会像您在问题中草拟的那样起作用,因为该语言不支持来自块(或函数或方法)的多个返回值。因此,您必须编写一个块来实际创建NSArray并返回它。但是如果你这样做,你最好省去块,直接创建数组。

我想我要找的是一个使用块的初始化器,它的行为类似于python for-yield生成器。但如果这是不可能的,那么使用块将使一个简单的问题变得过于复杂。谢谢你的意见!我想我要找的是一个使用类似python for-yield生成器的块的初始值设定项。但如果这是不可能的,那么使用块将使一个简单的问题变得过于复杂。谢谢你的意见!