如何在 Objective C 中将一个块作为参数传递给另一个块
我正在尝试定义一个以块作为参数的块。
下面这行代码有什么问题?
id (^cacheResult)(NSString *, id(^)(void)) = ^(NSString *name, id(^)(void)block) {
NSObject *item = nil;
block();
return item;
};
为什么编译器总是给出类似 Parameter name oblited
和 Expected ")"
的错误?
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 ")"
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
块的语法与函数指针类似。您必须在 ^ 之后声明块名称
Blocks have similar syntax to function pointers. You have to declare block name after the ^
这就是发明
typedef
的原因。像这样嵌入函数指针或块类型是很痛苦的。试试这个:它将使块类型的使用更容易阅读。 :)
This is why
typedef
was invented. Embedding function pointers or block types like this is a pain. Try this instead:It'll make working with block types a lot easier to read. :)
您可能指的是作业右侧的
id(^block)(void)
吗?Did you possibly mean
id(^block)(void)
on the RHS of the assignment?