2017-01-30 77 views
0

对于下列:遗留不断侵犯* 2

struct Constants { 
    static let m2Pi = CGFloat(M_PI) * 2 
} 

SwiftLint 0.16.1警告我:

警告:传统恒冲突:STRUCT范围的常数是优选在传统的全局常量上。 (legacy_constant)

请注意,我需要此值为UIBezierPath.init(arcCenter center: CGPoint, radius: CGFloat, startAngle: CGFloat, endAngle: CGFloat, clockwise: Bool)以获得一个封闭的弧线。

+0

这似乎只是一个愚蠢的警告,我...作为C开发人员,那些全局常量是非常重要的......如果你创建了一个枚举或命名空间并使常量等于全局常量,它会在你指定全局常量的位置上抱怨它吗? –

+1

@GradyPlayer代码质量很重要。这不是一个愚蠢的警告。请注意,'M_PI'实际上是一个宏,因此在C中它可以转换为任何类型(它是一个文字)。在Swift中,你必须对它进行强制转换,因此使用这个特定类型的已经给定的常量会更安全。将它们命名为一个结构并删除不需要的M_前缀(它不再是全局的)只是让你的代码更加一致。 – Sulthan

回答

6

在迅速3,PI现在这样定义的:

CGFloat.pi 

您也可以这样说:

Double.pi 
Float.pi