如何将 typedef'd 块作为参数传递给本身是方法参数的块?



我有一个方法,它接受一个参数。该参数为块。这个块本身有两个参数,它们也是块。他们有返回void并接受一个参数的特性引用对象

为方便起见,让我们对作为参数的块进行类型定义其他块。

typedef void (^MyParamBlock)(id);

然后,接受block的方法看起来像

[self someMethod:^(MyParamBlock pBlock1, MyParamBlock pBlock2) {
  // . . .
}

如何创建MyParamBlocks来传递给方法?下面的视图控制器代码是一个例子。myparamblock pb1和pb2不会被传递给someemethod的调用。

//
//  ViewController.m
//  PassingBlocksAsParamsToABlock
#import "ViewController.h"
typedef void (^MyParamBlock)(id);
@implementation ViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
    MyParamBlock pb1 = ^(id obj) {
        NSLog(@"%@", obj);
    };
    MyParamBlock pb2 = ^(id obj) {
        NSLog(@"%@", obj);
    };
    [self someMethod:^(MyParamBlock pb1, MyParamBlock pb2) {
        NSString *str = @"strng";
        NSLog(@"%@", str);
        pb1(str);
        pb2(str);
    }];
}
- (void)someMethod:(void(^)(MyParamBlock, MyParamBlock))block
{
    NSLog(@"hallo");
    id pb1 = ^(id value) {
        // . .
    };
    id pb2 = ^(id anotherValue) {
        // . .
    };
    block(pb1, pb2);
}

@end

您当前版本的someemethod接受一个block,该block接受两个MyParamBlocks

- (void)someMethod:(void(^)(MyParamBlock, MyParamBlock))block

你可能想要这个…

- (void)someMethodWithFirstBlock:(MyParamBlock)firstBlock secondBlock:(MyParamBlock)secondBlock

或者……

- (void)someMethodWithParameterBlocks:(NSArray *)parameterBlocks; //of MyParamBlocks

(从我上面的评论:)你不传递pb1, pb2someMethod:,这恰恰是另一种方式:someMethod:在调用传递给someMethod:的块时传递两个块作为参数。

最新更新