簡體   English   中英

不兼容的塊指針類型使用類型為'double(^)(CGFloat)'的表達式初始化'CGFloat(^ __ strong)(CGFloat)'

[英]Incompatible block pointer types initializing 'CGFloat (^__strong)(CGFloat)' with an expression of type 'double (^)(CGFloat)'

我正在嘗試創建一個帶有CGFloat參數並返回CGFloat的塊變量。

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

這個定義有什么問題? 為什么會收到此警告?

在iOS(和其他32位平台)上, CGFloatfloat的別名。

您的文字( 444563.4004 )是double ,這將myFloat提升為double ,並使代碼塊的返回類型為double (而不是聲明debt時所說的float )。 將字面量更改為float (將f附加到其末尾),或將其CGFloatCGFloat

另一種可能的解決方案是使用具有顯式返回類型的塊:

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

為了避免編譯器試圖從返回語句中“猜測”返回類型。

在“塊編程主題”中比較創建塊:

如果沒有顯式聲明塊表達式的返回值,則可以從塊的內容中自動推斷出它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM