我是一个Objective C和iOS开发的初学者,但是我已经是13年的.NET老手了。我很难在脑中绘制下面这个声明,它来自于Objective C编程指南:
void (^(^a)(void (^) (void))) (void) = ...
这被用作为一个例子,说明为什么要使用typedef
来定义块,但是我想更好地了解块定义语法,所以希望能够理解这个例子的意思。
到目前为止,我画出了以下的示意图:
我现在遇到的问题是,我对基本语法的理解只到这里:
[return_val] (^[block_name]) ([block_args]) = ...
如果是这种情况,那么我拥有的是一个返回void且没有参数的块,但它的名字是(^a) (void (^) void)
。这意味着我的块名称本身就是一个块,而不是简单的字符串。
很明显我在这里还缺少一些东西。能否请有经验的人给予一些解释?根据该网站,它被简化为:
typedef void (^SimpleBlock) (void);
SimpleBlock (^complexBlock) (SimpleBlock) = ...
我只是不知道如何做到。
编辑:第三个 void 应该在括号里面。我已经修正了这一点。图片上是错误的,但我不想为此重新制作整个图片。 :) 如果它被证明是我的问题源头,我会在这里修复它。
void (^(^a)(void (^) void)) (void)
是正确的吗?第三个void
不应该加括号吗?你引用的链接中在哪里可以找到这个表达式? - rmaddy