Objective c 如何通过typedef';d块作为块的参数,而块本身是方法的参数?
我有一个只接受一个参数的方法。此参数是一个块。 此块本身接受两个参数,它们也是块。他们有 返回无效并接受一个论点的特征 引用一个对象 为了方便起见,让我们键入定义为 另一个街区Objective c 如何通过typedef';d块作为块的参数,而块本身是方法的参数?,objective-c,objective-c-blocks,Objective C,Objective C Blocks,我有一个只接受一个参数的方法。此参数是一个块。 此块本身接受两个参数,它们也是块。他们有 返回无效并接受一个论点的特征 引用一个对象 为了方便起见,让我们键入定义为 另一个街区 typedef void (^MyParamBlock)(id); 然后,获取块的方法如下所示 [self someMethod:^(MyParamBlock pBlock1, MyParamBlock pBlock2) { // . . . } 如何创建要传递给该方法的MyParamBlocks?以下视图控制器
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
当前版本的someMethod使用的块包含两个
MyParamBlocks
- (void)someMethod:(void(^)(MyParamBlock, MyParamBlock))block
你可能想要这个
- (void)someMethodWithFirstBlock:(MyParamBlock)firstBlock secondBlock:(MyParamBlock)secondBlock
或者也许
- (void)someMethodWithParameterBlocks:(NSArray *)parameterBlocks; //of MyParamBlocks
当前版本的someMethod使用的块包含两个
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:
(从我上面的评论:)的块时,你没有传递pb1
,pb2
到someMethod:
,正好相反:someMethod:
调用传递给someMethod:
的块时,将两个块作为参数传递给该块。在该块中有一些变量阴影。您不会将pb1、pb2传递给someMethod
,另一种方法是:someMethod
在调用传递给someMethod
的块时,将两个块作为参数传递-也许你可以举一个更具体的例子来说明你想要达到的目标。@MartinR-谢谢你的帮助。我接受这个答案。基本上,我误解了我正在阅读的一些文档,认为当我只需要调用传递给我的块时,我必须滚动我自己的块。在该块中有一些变量阴影。你不能将pb1、pb2传递给someMethod
,另一种方法是:someMethod
在调用传递给someMethod
的块时,将两个块作为参数传递-也许你可以举一个更具体的例子来说明你想要达到的目标。@MartinR-谢谢你的帮助。我接受这个答案。基本上,我误解了我正在阅读的一些文档,认为当我只需要调用传递给我的文档时,我必须滚动自己的块。