ブロックを定義して割り当てようとすると、次のエラーが発生します。
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
からint
に変更しvoid
ます。
void (^bl)(int) = ^(int k) {
[_self c2:k];
};
ブロックの言語仕様を見ると、何が起こっているかがわかります。
戻り型はオプションであり、return ステートメントから推測されます。return ステートメントが値を返す場合、それらはすべて同じ型の値を返す必要があります。値が返されない場合、推測されたブロックの型は void です。それ以外の場合は、return ステートメント値の型です。
Apples の例では、戻り値の型は、ブロック変数の戻り値の型num * multiplier
と一致する型になります。int
myBlock
しかし、あなたの場合、return
ステートメントがないため、戻り値の型void
はブロック変数の戻り値の型と一致しませんbl
。