如何将块作为参数传递到Objective C中的另一个块

时间:2011-12-30 18:12:30

标签: objective-c syntax objective-c-blocks

我正在尝试定义一个以块为参数的块。

以下代码行出了什么问题?

id (^cacheResult)(NSString *, id(^)(void)) = ^(NSString *name, id(^)(void)block) {
    NSObject *item = nil;
    block();
    return item;
};

为什么编译器会一直出现Parameter name omittedExpected ")"等错误?

3 个答案:

答案 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)