2012-04-27 55 views
0

可能重複:
Obj-C: __block variables如何使用塊作爲參數

在塊programin如何使用塊作爲參數

 NSArray *(^blockreturnarray) (NSArray *); 
    blockreturnarray= ^(NSArray * a) 
     { 
      NSLog(@"%@",a); 
      return a; 
     }; 

    blockreturnarray(array1); 

簡單的我的問題我有一個塊創建另一個塊創建如何在一個塊中傳遞參數Block。

+0

可能DUP - http://stackoverflow.com/questions/8878358/obj-c-block-variables – rishi 2012-04-27 10:04:44

+0

@Jacques - 已標記了它。感謝您將我的答案轉換爲評論。 – 2012-04-27 19:40:13

回答

5

這可能會很麻煩,所以我會用類型定義的,它可能是這個樣子

typedef void (^basicBlock)(void); 
typedef void (^blockAcceptingBlock)(basicBlock); 

然後

basicBlock block =^{ 
    NSLog(@"Called from block passed as param"); 
}; 

blockAcceptingBlock parentBlock = ^(basicBlock childBlock) { 
    childBlock(); 
}; 

parentBlock(block); 

沒有類型定義的開始有點與定義吵所有圓括號(請記住,這些都是簡單的塊,所以顯示的defs仍然可讀)

void (^block)(void) =^{ 
    NSLog(@"Called from block passed as param"); 
}; 

void (^parentBlock)(void (^childBlock)(void)) = ^(void (^childBlock)(void)) { 
    childBlock(); 
}; 

parentBlock(block); 

兩個輸出

#=> 2012-04-27 11:39:12.798 Untitled[19725:707] Called from block passed as param 
+0

Typedefs絕對是要走的路線 – 2012-04-27 10:45:02

+0

謝謝你的好例子。 – PeterParker 2012-04-27 11:15:43

+0

如何IN塊作爲塊返回並阻止參數 – PeterParker 2012-04-27 11:19:05