尝试定义和分配块时出现此错误:
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
。