Objective-Cのブロックを変数に入れて呼び出す

Objective-Cのあるひとつのメソッド内のあちこちで実行される処理があるような時に、ブロックを変数に入れて何ヶ所かで呼び出したい時がある。書き方をよく忘れるので、Objective-CでBlockを変数に入れる方法の具体例を挙げる。

  // 返り値なし, 引数なしの関数
  void (^simpleBlock)(void) = ^() {
    NSLog(@"hello");
  };

  // 返り値あり, 引数なしの関数
  int (^returnBlock)(void) = ^int() {
    return 1;
  };

  // 返り値なし, 引数ありの関数
  void (^argBlock)(int) = ^(int num) {
    NSLog(@"%d", num);
  };

  //   これでも動く
  void (^arg2Block)(int num) = ^(int num) {
    NSLog(@"%d", num);
  };

  // 返り値あり, 引数ありの関数
  int (^argAndReturnBlock)(int) = ^int(int num) {
    return num * num;
  };

  // 呼び出し方はそれぞれ以下の通り
  simpleBlock();
  returnBlock();
  argBlock(4);
  argAndReturnBlock(4);

コメントを残す