我試圖創建一個需要CGFloat參數並返回CGFloat 。使用'double(^)(CGFloat)'表達式初始化'CGFloat(^ __ strong)(CGFloat)'的不兼容塊指針類型
CGFloat (^debt)(CGFloat) = ^(CGFloat myFloat) {
return myFloat * 444563.4004;
};
這個定義有什麼問題?爲什麼我得到這個警告?
我試圖創建一個需要CGFloat參數並返回CGFloat 。使用'double(^)(CGFloat)'表達式初始化'CGFloat(^ __ strong)(CGFloat)'的不兼容塊指針類型
CGFloat (^debt)(CGFloat) = ^(CGFloat myFloat) {
return myFloat * 444563.4004;
};
這個定義有什麼問題?爲什麼我得到這個警告?
在iOS(和其他32位平臺)上,CGFloat
是float
的別名。
你的文字(444563.4004
)是double
,促進myFloat
到double
,讓您的塊double
的返回類型(而不是float
你說,當你宣佈debt
這將是)。將字面量更改爲float
(將f
附加到末尾),或將其轉換爲CGFloat
。
另一種可能的解決方案是使用一個塊有明確的返回類型:
CGFloat (^debt)(CGFloat) = ^CGFloat (CGFloat myFloat) {
return myFloat * 444563.4004;
};
,以避免編譯器試圖「猜測」從返回語句返回類型。
在「塊編程主題」比較Creating a Block:
如果沒有顯式聲明塊 表達的返回值,就可以自動從 塊的內容推斷。
很好的答案。另外,令人驚歎的ascii藝術! – zakdances 2013-03-24 02:35:38