私は同様の質問をしましたが、それらはすべて、配列の特定の値にブロックを使用することに関係していました。これは少し異なります。初期化時にブロックを使用して配列の値を入力したいと思います。これを行うために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はブロックではなくオブジェクトを予期しているため、さらに、ブロックは1回実行され、1つのオブジェクトのみが返されます。それで、これは可能/実行可能ですか、それともinitWithBlockのようなメソッドを作成するためにNSArrayをサブクラス化する必要がありますか?