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

时间:2013-07-03 13:53:30

标签: objective-c objective-c-blocks

使用文档中的apple's example

float (^oneFrom)(float);


oneFrom = ^(float aFloat) {

  float result = aFloat - 1.0;

  return result;

};

我收到两个错误:

  1. 使用不同类型重新定义'oneFrom':'int'vs'love(^)(float)'
  2. 缺少类型说明符,默认为'int'
  3. 同样来自doc ..

      

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

2 个答案:

答案 0 :(得分:3)

您不能仅在函数中定义文件范围上的块。这按预期工作:

void foo (void)
{
    float (^oneFrom)(float);
    oneFrom = ^(float aFloat) {
        float result = aFloat - 1.0;
        return result;
    };
}

答案 1 :(得分:-1)

该块没有返回类型,默认返回类型为void,您需要转到

float (^oneFrom)(float);

oneFrom = ^ float (float aFloat) {

  float result = aFloat - 1.0;

  return result;

};

here是一个更好的阻止示例