这是来自apple blocks docs,我很难理解这一点,请任何人解释一下
如果你没有显式声明一个块表达式的返回值,它可以从块的内容中自动推断出来。如果推断返回类型并且参数列表为 void,那么您也可以省略 (void) 参数列表。如果或当存在多个 return 语句时,它们必须完全匹配(必要时使用强制转换)。
这是来自apple blocks docs,我很难理解这一点,请任何人解释一下
如果你没有显式声明一个块表达式的返回值,它可以从块的内容中自动推断出来。如果推断返回类型并且参数列表为 void,那么您也可以省略 (void) 参数列表。如果或当存在多个 return 语句时,它们必须完全匹配(必要时使用强制转换)。
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 语句时,它们必须完全匹配(必要时使用强制转换)。
简单地说,一个块必须只返回一种类型的数据。它不能返回整数和浮点数。