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

Ton*_*ony 12 syntax objective-c objective-c-blocks

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

以下代码行有什么问题?

id (^cacheResult)(NSString *, id(^)(void)) = ^(NSString *name, id(^)(void)block) {
    NSObject *item = nil;
    block();
    return item;
};
Run Code Online (Sandbox Code Playgroud)

为什么编译器会像Parameter name omitted和那样给出错误Expected ")"

Max*_*Max 10

id (^cacheResult)(NSString *, id(^)(void)) = ^(NSString *name, id(^block)(void)) {
    NSObject *item = nil;
    block();
    return item;
};
Run Code Online (Sandbox Code Playgroud)

块具有与函数指针类似的语法.你必须在^之后声明块名


Jon*_*pan 10

这就是typedef发明的原因.像这样嵌入函数指针或块类型是一种痛苦.试试这个:

typedef id (^ InnerBlock)(void);
typedef id (^ OuterBlock)(NSString *, InnerBlock);
Run Code Online (Sandbox Code Playgroud)

它将使块类型的使用更容易阅读.:)