我有一个带一个参数的方法 . 这个参数是一个块 . 该块本身有两个参数,也就是块 . 它们具有返回void并接受引用对象的一个参数的特征 .
为方便起见,我们键入作为另一个块参数的块 .
typedef void (^MyParamBlock)(id);
然后,采用块的方法看起来像
[self someMethod:^(MyParamBlock pBlock1, MyParamBlock pBlock2) {
// . . .
}
如何创建MyParamBlocks以传递给方法?以下视图控制器代码是一个示例 . MyParamBlocks pb1和pb2不会传递给someMethod调用 .
//
// 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
2 回答
(从我上面的评论:)你没有将
pb1
,pb2
传递给someMethod:
,它正好相反:someMethod:
在调用传递给someMethod:
的块时传递两个块作为参数 .你当前版本的someMethod需要一个占用两个
MyParamBlocks
的块 .你可能想要这个......
或者可能...