【发布时间】:2014-02-27 01:28:06
【问题描述】:
我是 Objective C 和 iOS 开发的初学者,但是 13 年的 .NET 老手。我很难在脑海中描绘出以下声明,该声明来自Programming with 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 (^(^a)(void (^) void)) (void)是正确的吗?第三个void不应该在括号中吗?您引用的链接中的哪个 frmm? -
你是对的。我会在消息中修复它。也就是说,我认为这不会在物质上改变任何东西,不是吗? (另外,链接在第一段的帖子中。)
-
YouTube 上有相当不错的视频教程。我发现它很有帮助。 youtube.com/watch?v=9FWqh24b9oE
-
Nils Hayat 有一篇非常棒的博文,非常清楚地解释了块语法,从 C 声明符的概念建立起理解。链接:Block Syntax Explained。 这可能不是一个很好的答案,但这篇博文非常好,我想突出它。
-
一两个 typedef 可以让代码更易读。
标签: ios objective-c objective-c-blocks