尝试定义和分配块时出现此错误:

int (^bl)(int) = ^(int k)
{
[_self c2:k]; // incompatible block pointer types initializing 'int (^)(int)' with an expression of type 'void (^)(int)'
};
这是来自一个块教程:

到底是怎么回事?
尝试定义和分配块时出现此错误:

int (^bl)(int) = ^(int k)
{
[_self c2:k]; // incompatible block pointer types initializing 'int (^)(int)' with an expression of type 'void (^)(int)'
};
这是来自一个块教程:

到底是怎么回事?
bl将from的返回类型更改int为void。
void (^bl)(int) = ^(int k) {
[_self c2:k];
};
如果您查看块的语言规范,您将看到发生了什么:
返回类型是可选的,是从返回语句中推断出来的。如果 return 语句返回一个值,它们都必须返回一个相同类型的值。如果没有返回值,则推断的 Block 类型为 void;否则它是返回语句值的类型。
在 Apple 示例中,返回类型将是num * multiplier与int块变量的返回类型匹配的类型myBlock。
但是在您的情况下,没有return语句,因此返回类型将void与块变量的返回类型不匹配bl。