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

Man*_*ani 10 types type-conversion cgfloat swift

试图在返回`CGFloat的函数中进行算术运算,我得到一个错误:

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

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

还有其他人见过这类问题吗?

Sul*_*han 16

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

在64位计算机上,CGFloat定义为double,您将编译它没有问题,因为M_PI并且x都是双打.

在32位机器上,CGFloat是一个floatM_PI仍然是双倍的.不幸的是,Swift中没有隐式转换,所以你必须明确地转换:

return (CGFloat(M_PI) * (x) / 180.0)
Run Code Online (Sandbox Code Playgroud)

180.0推断出文字的类型.

在Swift 3中

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

return (x * .pi / 180.0)
Run Code Online (Sandbox Code Playgroud)


小智 11

在这个具体案例中,我有一个可爱的伎俩推荐

let ? = CGFloat(M_PI)

Unicode无处不在,π很容易用Opt+P