一尘不染

由于Swift缺乏CGFloat的隐式转换而造成的混乱

swift

尝试在返回`CGFloat’的函数中进行算术运算,出现错误:

找不到接受提供的参数的’/’的重载

func kDCControlDegreesToRadians(x : CGFloat) -> CGFloat
{ 
     return (M_PI * (x) / 180.0) // error is here. 
}

其他人看到过这种类型的问题吗?


阅读 362

收藏
2020-07-07

共1个答案

一尘不染

这是一个问题double,以float转换。

在64位计算机上,CGFloat定义为double并且您将编译它而不会出现问题,因为M_PIx都是双精度。

在32位计算机上,CGFloat是,floatM_PI仍然是两倍。不幸的是,Swift中没有隐式强制转换,因此您必须显式强制转换:

return (CGFloat(M_PI) * (x) / 180.0)

180.0文字的类型被推断。

在Swift 3中

M_PI已弃用,请CGFloat.pi改用:

return (x * .pi / 180.0)
2020-07-07