1

CGFloat引数を取り、CGFloatを返すブロック変数を作成しようとしています。

CGFloat (^debt)(CGFloat) = ^(CGFloat myFloat) {
   return myFloat * 444563.4004;
};

この定義の何が問題になっていますか?なぜこの警告が表示されるのですか?

4

2 に答える 2

5

別の可能な解決策は、明示的な戻りタイプを持つブロックを使用することです。

CGFloat (^debt)(CGFloat) = ^CGFloat (CGFloat myFloat) {
    return myFloat * 444563.4004;
};

コンパイラがreturnステートメントからreturn型を「推測」しようとするのを避けるため。

「ブロックプログラミングトピック」でのブロックの作成を比較してください。

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

于 2013-03-24T12:45:26.137 に答える
4

iOS(およびその他の32ビットプラットフォーム)ではCGFloat、はのエイリアスですfloat

あなたのリテラル(444563.4004)は、doubleに昇格myFloatし、doubleあなたのブロックの戻り型を作りますdoublefloatあなたが宣言したときにそうなるとあなたが言ったのではありませんdebt)。リテラルをfloat(末尾に追加f)に変更するか、にキャストしCGFloatます。

于 2013-03-24T02:32:17.203 に答える