麻烦,块,iOS

时间:2012-07-16 07:05:23

标签: objective-c-blocks

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

int (^bl)(int) = ^(int k)
{
    [_self c2:k]; // incompatible block pointer types initializing 'int (^)(int)' with an expression of type 'void (^)(int)'
};

这来自blocks tutorial

发生了什么事?

1 个答案:

答案 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的返回类型不匹配。