20930


引数、返り値なしのblockの実行方法が分かりません。

下記コードで引数なし、返り値なしのblockと引数あり、返り値なしのblockをテストしています。

[code]

    - (void)test1:(void(^)(void))block {
        NSLog(@"test1呼び出し");
        (void)block;
    }
    
    - (IBAction)test1Tapped:(id)sender {
        [self test1:^{
            NSLog(@"ブロック実行");
        }];
    }
    
    - (void)test2:(void(^)(NSString *))block {
        NSLog(@"test2呼び出し");
        block(@"ブロックの引数");
    }
    
    - (IBAction)test2Tappeed:(id)sender {
        [self test2:^(NSString *string) {
            NSLog(@"ブロック実行: %@", string);
        }];
    }
    
[/code]

test2Tappedメソッドではtest2メソッドに付属しているブロックが実行されましたが  
test1Tappedメソッドではtest1メソドに付属しているブロックが実行されませんでした。  
SDKの`- (void)presentViewController:(UIViewController *)viewControllerToPresent
animated:(BOOL)flag completion:(void
(^)(void))completion`メソッドではtest1Tappedメソッドと同じように空のブロック`^{
}`でメソッド完了後の処理が記述できているので`test1`メソッドで同じことができてもおかしくないと思うのです。

原因および解決策わかる方いましたらご教授お願いします。


CC BY-SA 3.0
2016-01-14T13:45:26.883
20927
2016-01-14T14:23:08.353
12232
question
objective-c クロージャ
Objective-c 引数、返り値なしのblockの実行方法


このコードはblockそのものをvoidにキャストしているだけで、block呼び出しにはなっていません。

[code]

    - (void)test1:(void(^)(void))block {
        NSLog(@"test1呼び出し");
        (void)block;
    }
    
[/code]

(引数のない)blockを呼び出したいのであれば、(空の)カッコが必要です。

[code]

    - (void)test1:(void(^)(void))block {
        NSLog(@"test1呼び出し");
        (void)block();
    }
    
[/code]


CC BY-SA 3.0
2016-01-14T14:23:08.353
20930
2016-01-14T14:23:08.353
13972
20927
answer