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からintに変更しvoidます。

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

ブロックの言語仕様を見ると、何が起こっているかがわかります。

戻り型はオプションであり、return ステートメントから推測されます。return ステートメントが値を返す場合、それらはすべて同じ型の値を返す必要があります。値が返されない場合、推測されたブロックの型は void です。それ以外の場合は、return ステートメント値の型です。

Apples の例では、戻り値の型は、ブロック変数の戻り値の型num * multiplierと一致する型になります。intmyBlock

しかし、あなたの場合、returnステートメントがないため、戻り値の型voidはブロック変数の戻り値の型と一致しませんbl

于 2012-07-16T09:18:20.490 に答える