尝试定义和分配块时出现此错误:
int (^bl)(int) = ^(int k)
{
[_self c2:k]; // incompatible block pointer types initializing 'int (^)(int)' with an expression of type 'void (^)(int)'
};
这来自blocks tutorial:
发生了什么事?
答案 0 :(得分:1)
将bl
的返回类型从int
更改为void
。
void (^bl)(int) = ^(int k) {
[_self c2:k];
};
如果查看language specification for blocks,您会看到发生了什么:
返回类型是可选的,可以从return语句中推断出来。如果return语句返回一个值,则它们都必须返回相同类型的值。 如果没有返回值,则块的推断类型无效;否则它是return语句值的类型。
在Apples示例中,返回类型将是num * multiplier
的类型,int
匹配块变量myBlock
的返回类型。
但是在你的情况下没有return
语句,因此返回类型将是void
,它与块变量bl
的返回类型不匹配。