从Apple示例"创建块"中阻止语法错误

est*_*art 6 objective-c objective-c-blocks

使用来自docs的apple示例

float (^oneFrom)(float);


oneFrom = ^(float aFloat) {

  float result = aFloat - 1.0;

  return result;

};
Run Code Online (Sandbox Code Playgroud)

我收到两个错误:

  1. 使用不同类型重新定义'oneFrom':'int'vs'float(^)(float)'
  2. 类型说明符缺失,默认为'int'

也来自doc ..

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

Nik*_*uhe 3

您不能在文件范围内定义块,只能在函数中定义块。这按预期工作:

void foo (void)
{
    float (^oneFrom)(float);
    oneFrom = ^(float aFloat) {
        float result = aFloat - 1.0;
        return result;
    };
}
Run Code Online (Sandbox Code Playgroud)