1

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

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

这是来自一个块教程

到底是怎么回事?

4

1 回答 1

1

bl将from的返回类型更改intvoid

void (^bl)(int) = ^(int k) {
    [_self c2:k];
};

如果您查看块的语言规范,您将看到发生了什么:

返回类型是可选的,是从返回语句中推断出来的。如果 return 语句返回一个值,它们都必须返回一个相同类型的值。如果没有返回值,则推断的 Block 类型为 void;否则它是返回语句值的类型。

在 Apple 示例中,返回类型将是num * multiplierint块变量的返回类型匹配的类型myBlock

但是在您的情况下,没有return语句,因此返回类型将void与块变量的返回类型不匹配bl

于 2012-07-16T09:18:20.490 回答