Objective C的块语法

7

我刚刚阅读了另一个答案中的这段代码:

当你使用^{}语法创建一个块时...

我理解这个语法,并且经常使用它,但是我从中推断出可能还有其他可以用于创建块的语法。有吗?如果有,不同语法之间有什么优劣势呢?

2个回答

12
如果您的问题是关于块文本语法(用于匿名函数的语法),这里是一般形式:
^ 返回类型(参数列表){表达式}
基于此,您可以省略返回类型:
^(参数列表){表达式}
因为可以从返回类型中推断出来。如果没有返回值,则选择 void
此外,如果没有参数,您可以写成:
^ {表达式}
这与上面的形式相同。
^ void (void) { NSLog(@"Something"); }

为什么有时候我看到 ^ 前面有类型? - Philip007
抱歉,我的错误。我所说的“type”是指“返回类型”。我已经花了几个小时阅读来弄清楚块语法。据我所学,块声明和块字面量遵循不同的语法?在声明中,它是returnType (^blockName)(argTypeList),而在字面量中,它是^(returnType)(argList){body} - Philip007
1
@Philip007 如果你使用typedef进行声明,是可以的。更多信息建议查看此链接:http://yannickloriot.com/2011/11/working-with-blocks/。顺便说一句,如果你觉得有用的话,点个赞吧 ;) - Lorenzo B
谢谢提供链接,这份速查表非常棒。但是我不同意你关于typedef的说法。我认为块声明可以存在而不需要typedef。 - Philip007
就我今天所学,块经常在没有声明的情况下使用(也称为内联)。在使用相同块的多个地方的情况下,使用typedef使代码看起来更漂亮。希望我理解得对。 - Philip007

5

通过查看这里的内容,我认为唯一的区别在于函数是否使用返回类型/参数。


这是我正在寻找的简明答案。 - James Webster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接