2012-06-13 57 views
0

我已經問過類似的問題,但他們都關心使用塊的特定值的數組。這有點不同,我想在初始化時使用塊填充數組的值。除了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的方法?

回答

3

你不需要子類NSArray來添加一個方法。一個類別可以。

你想要什麼是不可能的任何當前的NSArray方法。當你在你的問題中起草它時,它不會起作用,因爲該語言不支持塊(或函數或方法)的多個返回值。所以你必須編寫一個實際創建一個NSArray並返回它的塊。但是如果你這樣做了,你也可以離開這個區塊並立即創建這個陣列。

+2

我想我正在尋找的是一個初始值設定項,它使用一個塊,它的行爲像一個python for yield生成器。但如果這是不可能的,那麼使用塊將簡單地過度複雜化一個直截了當的問題。謝謝您的意見 ! –