如何声明命名的嵌套块参数?

时间:2014-12-23 18:07:14

标签: objective-c objective-c-blocks

我目前有以下工作:

typedef BOOL(^InnerBlockType)(int arg1, int arg2);

- (BOOL)doStuff:(void(^)(InnerBlockType innerBlock))block;

但我想删除typedef并使块内联,因此参数在自动填充后可见,使其更易于使用。但是,我无法正确理解语法。我可以在那里获得99%,但不包括给该块命名。当我插入标识符时,Xcode告诉我它期待)

// Compiles, but is missing the inner block's name
- (BOOL)doStuff:(void(^)(BOOL(^)(int arg1, int arg2)))block;

// This is what I'd like
- (BOOL)doStuff:(void(^)(BOOL(^)(int arg1, int arg2))innerBlock)block;
// But I get a compiler error here:                  ^   Expected ')'

我已经尝试将innerBlock标识符移入和移出所有其他不同的括号组合,但我得到了相同的错误。我在哪里可以插入满足编译器的innerBlock标识符?

1 个答案:

答案 0 :(得分:2)

删除名称:

- (BOOL)doStuff:(void(^)(BOOL(^)(int arg1, int arg2)))block;

或者像传统命名的块一样插入它:

- (BOOL)doStuff:(void(^)(BOOL(^innerBlock)(int arg1, int arg2)))block;

尽管如此,我确实注意到自动完成功能给了我一个艰难的时间,但它似乎并没有很好地接受它。结果如下:

[self doStuff:^(BOOL (^innerBlockType)(int arg1, int arg2)) {
    //
}];