2014-12-23 148 views
0

目前我有以下,这是工作:如何声明一个命名的嵌套块参数?

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标识符?

回答

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)) { 
    // 
}]; 
+0

我们在同一时间输入我们的答案!一些额外的挖掘出现了你提供的第二个。我现在删除了我的。谢谢! – Dov

+0

@Dov - 没问题:) – Logan

+0

同意,自动填充很时髦。我向苹果报告。 – Dov