我正在尝试创建一个带有CGFloat参数并返回CGFloat的块变量。
CGFloat (^debt)(CGFloat) = ^(CGFloat myFloat) {
return myFloat * 444563.4004;
};
这个定义有什么问题?为什么我会收到此警告?
答案 0 :(得分:4)
在iOS(和其他32位平台)上,CGFloat
是float
的别名。
您的文字(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:
如果没有显式声明块的返回值 表达式,它可以从内容中自动推断出来 块。