我有一个方法,它接受一个参数。该参数为块。这个块本身有两个参数,它们也是块。他们有返回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
, pb2
到someMethod:
,这恰恰是另一种方式:someMethod:
在调用传递给someMethod:
的块时传递两个块作为参数。