Я задал аналогичные вопросы, но все они заинтересованы в использовании блока для определенного значения массива. Это немного другое, я хочу заполнить значения массива при инициализации с помощью блока. Помимо подклассификации NSArray для этого существует другой способ, аналогичный этому: В этом сценарии я заполняю массив днями недели, где сегодня всегда посередине. Мой «классический» способ сделать это будет: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?
Я предполагаю, что я ищу, это инициализатор, использующий блок, который ведет себя как генератор python for-yield. Но если это невозможно, то использование блоков просто усложнит несколько простой вопрос. Спасибо за ваш вклад! –