我目前有以下工作:
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
标识符?
答案 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)) {
//
}];