繁体   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