2

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

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

4

1 回答 1

4

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

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

也可以写成

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

不用说返回类型。返回类型是自动推断的。对于返回非 void 值的块来说确实如此。

2)如果返回类型是推断的并且参数列表是void,那么你也可以省略(void)参数列表

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

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

我相信这种块是可能的。

 ^{
     printf("Hello world");
 }

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

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

简单地说,一个块必须只返回一种类型的数据。它不能返回整数浮点数。

于 2012-10-24T11:17:27.260 回答