问题
I'm trying to define a block that takes a block as an argument.
What's wrong with the following line of code?
id (^cacheResult)(NSString *, id(^)(void)) = ^(NSString *name, id(^)(void)block) {
NSObject *item = nil;
block();
return item;
};
Why does the compiler keep giving errors like Parameter name omitted
and Expected ")"
?
回答1:
id (^cacheResult)(NSString *, id(^)(void)) = ^(NSString *name, id(^block)(void)) {
NSObject *item = nil;
block();
return item;
};
Blocks have similar syntax to function pointers. You have to declare block name after the ^
回答2:
This is why typedef
was invented. Embedding function pointers or block types like this is a pain. Try this instead:
typedef id (^ InnerBlock)(void);
typedef id (^ OuterBlock)(NSString *, InnerBlock);
It'll make working with block types a lot easier to read. :)
回答3:
Did you possibly mean id(^block)(void)
on the RHS of the assignment?
来源:https://stackoverflow.com/questions/8682537/how-to-pass-a-block-as-an-argument-into-another-block-in-objective-c