不兼容的块指针类型使用类型'double(^)(CGFloat)'的表达式初始化'CGFloat(^ __ strong)(CGFloat)'

时间:2013-03-24 02:22:36

标签: ios objective-c objective-c-blocks cgfloat

我正在尝试创建一个带有CGFloat参数并返回CGFloat的块变量。

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

这个定义有什么问题?为什么我会收到此警告?

2 个答案:

答案 0 :(得分:4)

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

您的文字(444563.4004)是double,它会将myFloat提升为double并生成您的广告块double的返回类型(而不是当你宣布float时,你说的debt。将文字更改为float(将f附加到其末尾),或将其转换为CGFloat

答案 1 :(得分:4)

另一种可能的解决方案是使用具有显式返回类型的块:

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

避免编译器试图从return语句中“猜测”返回类型。

在“块编程主题”中比较Creating a Block

  

如果没有显式声明块的返回值   表达式,它可以从内容中自动推断出来   块。