0

重複の可能性:
Obj-C:__block変数

ブロックプログラムでブロックをパラメータとして使用する方法

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

     blockreturnarray(array1);

簡単に言えば、私の質問では、1つのブロックを作成し、別のブロックを作成します。つまり、1つのブロックでパラメータBlockを渡す方法です。

4

1 に答える 1

5

これは毛むくじゃらになる可能性があるため、typedef を使用すると、次のようになります。

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

それで

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

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

parentBlock(block);

typedef がないと、すべての丸括弧を使用した定義で少しうるさくなります (これらは単純なブロックであるため、示されている定義はまだかなり読みやすいことに注意してください)。

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
于 2012-04-27T10:40:33.747 に答える