我正在尝试定义一个以块为参数的块。
以下代码行出了什么问题?
id (^cacheResult)(NSString *, id(^)(void)) = ^(NSString *name, id(^)(void)block) {
NSObject *item = nil;
block();
return item;
};
为什么编译器会一直出现Parameter name omitted
和Expected ")"
等错误?
答案 0 :(得分:10)
id (^cacheResult)(NSString *, id(^)(void)) = ^(NSString *name, id(^block)(void)) {
NSObject *item = nil;
block();
return item;
};
块具有与函数指针类似的语法。您必须在^
之后声明块名称答案 1 :(得分:10)
这就是typedef
被发明的原因。像这样嵌入函数指针或块类型是一种痛苦。试试这个:
typedef id (^ InnerBlock)(void);
typedef id (^ OuterBlock)(NSString *, InnerBlock);
它将使块类型的处理更容易阅读。 :)
答案 2 :(得分:3)
您是否可能在作业的RHS上表示id(^block)(void)
?