2

これはアップルブロックのドキュメントからのもので、これを理解するのに苦労しています。誰か説明してください

ブロック式の戻り値を明示的に宣言しない場合、ブロックの内容から自動的に推測できます。戻り値の型が推定され、パラメーター リストが void の場合は、(void) パラメーター リストも省略できます。複数の return ステートメントが存在する場合、それらは完全に一致する必要があります (必要に応じてキャストを使用します)。

4

1 に答える 1

4

1)ブロック式の戻り値を明示的に宣言しない場合、ブロックの内容から自動的に推測できます。

ブロック

void ^(float aFloat) {
   printf("value is :%f",aFloat);
};

のように書くこともできます

^(float aFloat) {
   printf("value is :%f",aFloat);
};

戻り値の型は言うまでもありません。戻り値の型は自動的に推測されます。これは、非 void 値を返すブロックに当てはまります。

2)戻り値の型が推測され、パラメーター リストが void の場合、(void) パラメーター リストも省略できます。

ドキュメントは具体的に

引数を取らないブロックは、引数リストで void を指定する必要があります。

この種のブロックは可能だと思います。

 ^{
     printf("Hello world");
 }

戻り値が推測される場所であり、そのため、void は必要ありません。これについてはよくわからないので、説明をお願いします。

3)複数の return ステートメントが存在する場合、それらは (必要に応じてキャストを使用して) 正確に一致する必要があります。

簡単に言えば、ブロックは 1 種類のデータのみを返さなければならないということです。intfloat を返すことはできません。

于 2012-10-24T11:17:27.260 に答える