我试图找到一种方法在我的Swift代码中包含PI常量.我已经在另一个答案中找到了帮助import Darwin,我知道这些答案可以让我访问C函数.
我还检查了Math包裹,Darwin并发现了以下声明:
var M_PI: Double { get } /* pi */
所以,我假设有一种方法在代码中使用PI,我只是不知道如何 ...
我有两个GPS坐标
例如(Lat1,Long1)和(Lat2,Long2)
有人可以帮我找到这两点之间的角度.
值应为0-360度.
还有的警告的理由在这里,但没有回答的全貌.例如,以下代码触发警告:
(int)round(M_PI);
Run Code Online (Sandbox Code Playgroud)
但另一方面,以下代码不会:
double d;
(int)(d = round(M_PI));
Run Code Online (Sandbox Code Playgroud)
这不是:
(int)M_PI;
Run Code Online (Sandbox Code Playgroud)
的理由是,你不应该转换简单地铸造为int,但你应该使用round,floor或类似的功能.但是,使用round仍然会触发警告,但如上所示,类型化常量或指定的变量则不会.
所以,如果它是坏的,从投double来int,那么当你写为什么不报警触发(int)d或(int)M_PI?如果你想转换返回值,应该以什么方式规避警告?是否有警告可以更正确/合理的方式处理这些危险的转换?
我从Github分叉了一个项目,Xcode显示了很多警告:
'M_PI'已弃用:请使用'Double.pi'或'.pi'获取正确类型的值并避免投射.
和
'M_PI_2'已弃用:请使用'Double.pi'或'.pi'获取正确类型的值并避免投射.
由于两个M_PI和M_PI_2提示被替换Double.pi,我认为有实际上相同的值.但是,项目中有这个代码:
switch angle {
case M_PI_2:
...
case M_PI:
...
case Double.pi * 3:
...
default:
...
}
Run Code Online (Sandbox Code Playgroud)
我真的很困惑,是M_PI和M_PI_2不同的?还是他们一样?
更新:
事实证明这是我的错误,Xcode说'M_PI_2'已被弃用:请使用Double.pi / 2或.pi / 2获取正确类型的值并避免投射.所以它不是一个bug,只是太难注意到2个提示的区别.