我有一个带一个参数的方法。这个参数是一个块。 该块本身有两个参数,也就是块。他们有 返回虚空的特征并接受一个论点 引用一个对象。
为方便起见,我们要输入作为参数的块 其他街区。
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
答案 0 :(得分:3)
您当前的someMethod版本需要一个需要两个MyParamBlocks
的块。
- (void)someMethod:(void(^)(MyParamBlock, MyParamBlock))block
你可能想要这个......
- (void)someMethodWithFirstBlock:(MyParamBlock)firstBlock secondBlock:(MyParamBlock)secondBlock
或者也许......
- (void)someMethodWithParameterBlocks:(NSArray *)parameterBlocks; //of MyParamBlocks
答案 1 :(得分:1)
(来自我的上述评论:) 您不能将pb1
,pb2
传递给someMethod:
,这恰恰相反:调用传递给someMethod:
的块时,someMethod:
传递两个块作为参数。