Objective c 来自Apple示例的块语法错误';创建块';

Objective c 来自Apple示例的块语法错误';创建块';,objective-c,objective-c-blocks,Objective C,Objective C Blocks,从文档中使用 float (^oneFrom)(float); oneFrom = ^(float aFloat) { float result = aFloat - 1.0; return result; }; 我有两个错误: 使用不同类型重新定义“oneFrom”:“int”与“float(^)(float)”的比较 缺少类型说明符,默认为“int” 也是从医生那里 如果没有显式声明块的返回值 表达式,则可以从 块如果返回类型是推断的且参数列表为空, 然后还可以省略(vo

从文档中使用

float (^oneFrom)(float);


oneFrom = ^(float aFloat) {

  float result = aFloat - 1.0;

  return result;

};
我有两个错误:

  • 使用不同类型重新定义“oneFrom”:“int”与“float(^)(float)”的比较
  • 缺少类型说明符,默认为“int”
  • 也是从医生那里

    如果没有显式声明块的返回值 表达式,则可以从 块如果返回类型是推断的且参数列表为空, 然后还可以省略(void)参数列表。如果或何时 存在多个返回语句,它们必须完全匹配(使用 铸造(如有必要)


    该块没有返回类型,并且默认返回类型为void,您需要继续

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

    是一个更好的块示例

    您不能在文件范围内定义块,只能在函数中定义。这与预期的效果一样:

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

    此示例仍然报告相同的错误。我是否遗漏了一些明显的内容?否。该块有一个从实际的
    return
    语句中扣除的返回类型。它有正确类型的
    float
    。啊,是的,我错了,我总是出于某种原因隐式地这么做。你的答案可能也是这里真正的解决方案,我没想过障碍会在哪里defined@nikolai我想你的意思是“推断”而不是“推断”。也许“推断”是更好的选择?我的理解是块类似于C函数指针。我不应该在头文件中声明它吗?@estobart不,块是一个比函数指针复杂得多的概念。最重要的是:它们携带数据,因此必须在堆栈或堆上动态分配。C不允许初始化具有静态存储持续时间的对象,因此您不能在文件作用域上定义块。@estobbart当然,您可以在头文件中使用
    extern
    声明块类型变量。但是,无法定义块。请理解。有许多声明块的示例。是否存在使用块声明的情况?看起来块几乎总是用作块文本。一个例子是块类型的属性,例如
    NSFileHandle
    readabilityHandler