CGFloat引数を取り、CGFloatを返すブロック変数を作成しようとしています。
CGFloat (^debt)(CGFloat) = ^(CGFloat myFloat) {
return myFloat * 444563.4004;
};
この定義の何が問題になっていますか?なぜこの警告が表示されるのですか?
CGFloat引数を取り、CGFloatを返すブロック変数を作成しようとしています。
CGFloat (^debt)(CGFloat) = ^(CGFloat myFloat) {
return myFloat * 444563.4004;
};
この定義の何が問題になっていますか?なぜこの警告が表示されるのですか?
別の可能な解決策は、明示的な戻りタイプを持つブロックを使用することです。
CGFloat (^debt)(CGFloat) = ^CGFloat (CGFloat myFloat) {
return myFloat * 444563.4004;
};
コンパイラがreturnステートメントからreturn型を「推測」しようとするのを避けるため。
「ブロックプログラミングトピック」でのブロックの作成を比較してください。
ブロック式の戻り値を明示的に宣言しない場合は、ブロックの内容から自動的に推測できます。
iOS(およびその他の32ビットプラットフォーム)ではCGFloat
、はのエイリアスですfloat
。
あなたのリテラル(444563.4004
)は、double
に昇格myFloat
し、double
あなたのブロックの戻り型を作りますdouble
(float
あなたが宣言したときにそうなるとあなたが言ったのではありませんdebt
)。リテラルをfloat
(末尾に追加f
)に変更するか、にキャストしCGFloat
ます。