【发布时间】:2014-05-15 18:15:16
【问题描述】:
我有一个采用一个参数的方法。该参数是一个块。 这个块本身有两个参数,它们也是块。他们有 返回 void 并接受一个参数的特性 引用一个对象。
为方便起见,让我们对作为参数的块进行 typedef 其他块。
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
【问题讨论】:
-
你在那个块中有一些变量阴影。
-
您不将 pb1、pb2 传递给
someMethod,相反:someMethod在调用您传递给someMethod的块时传递两个块作为参数。 - 也许您可以展示一个更具体的示例来说明您想要实现的目标。 -
@MartinR - 谢谢你的帮助。我会接受这个作为答案。基本上,我误解了我正在阅读的一些文档,并认为当我只需要调用传回给我的文档时,我必须自己动手。
标签: objective-c objective-c-blocks