难以理解块编程的这一部分

时间:2012-10-24 10:45:49

标签: ios objective-c objective-c-blocks

这是来自apple blocks docs,我很难理解这个,请任何人解释一下

  

如果没有显式声明块的返回值   表达式,它可以从内容中自动推断出来   块。如果推断返回类型并且参数列表无效,   那么你也可以省略(void)参数列表。如果或何时   存在多个return语句,它们必须完全匹配(使用   必要时铸造。)

1 个答案:

答案 0 :(得分:4)

1)如果没有显式声明块表达式的返回值,可以从内容中自动推断出它     块

void ^(float aFloat) {
   printf("value is :%f",aFloat);
};

也可以写成

^(float aFloat) {
   printf("value is :%f",aFloat);
};

不说回报类型。返回类型是自动推断的。对于返回非空值的块,情况确实如此。

2)如果推断出返回类型且参数列表为空,那么您也可以省略(void)参数列表

这有点难以理解和混淆,因为文档特别说

  

不带参数的块必须在参数中指定void   列表。

我相信这种障碍是可能的。

 ^{
     printf("Hello world");
 }

其中推断出返回值,因此,不需要void。我不确定这一点,所以想澄清一下。

3)如果或当存在多个return语句时,它们必须完全匹配(必要时使用cast)。

简单来说,一个块必须只返回一种类型的数据。它不能返回int float。