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;
};
我有两个错误:
该块没有返回类型,并且默认返回类型为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
。