我怎样才能从度数转换为弧度?

我试图将这个Obj-C代码转换为Swift代码,但我不知道这个代码的等价物应该是什么?

 #define DEGREES_TO_RADIANS(degrees)((M_PI * degrees)/180) 

我Googlesearch,发现这一点

但我不明白如何在我的情况下在Swift中转换?

Xcode 9•Swift 4

 extension BinaryInteger { var degreesToRadians: CGFloat { return CGFloat(Int(self)) * .pi / 180 } } extension FloatingPoint { var degreesToRadians: Self { return self * .pi / 180 } var radiansToDegrees: Self { return self * 180 / .pi } } 

操场

 45.degreesToRadians // 0.785398163397448 Int(45).degreesToRadians // 0.785398163397448 Int8(45).degreesToRadians // 0.785398163397448 Int16(45).degreesToRadians // 0.785398163397448 Int32(45).degreesToRadians // 0.785398163397448 Int64(45).degreesToRadians // 0.785398163397448 UInt(45).degreesToRadians // 0.785398163397448 UInt8(45).degreesToRadians // 0.785398163397448 UInt16(45).degreesToRadians // 0.785398163397448 UInt32(45).degreesToRadians // 0.785398163397448 UInt64(45).degreesToRadians // 0.785398163397448 Double(45).degreesToRadians // 0.7853981633974483 CGFloat(45).degreesToRadians // 0.785398163397448 Float(45).degreesToRadians // 0.7853981 Float80(45).degreesToRadians // 0.785398163397448278999 

Apple提供了这些GLKit函数进行转换:

 func GLKMathDegreesToRadians(_ degrees: Float) -> Float func GLKMathRadiansToDegrees(_ radians: Float) -> Float 

这与您所要求的并不完全相同,但在Swift 3 / iOS 10中,您可以使用Measurementtypes并在不知道公式的情况下进行转换!

 let result = Measurement(value: 45, unit: UnitAngle.degrees) .converted(to: .radians).value 

此外,要转换弧度弧度(如果有人在谷歌上绊倒):

 var degrees = radians * (180.0 / M_PI) 
 let angle = 45° // angle will be in radians, 45 is in degrees 

Swift下编译3 。 仍然保留所有的值,用CGFloats …做弧度的所有计算,但是用常数以度数来使代码更易读。 例如:90 °°符号会奇迹般地度量弧度转换。

如何设置:

定义和使用°符号的后缀运算符。 这个操作符将会转换度数到弧度。 这个例子适用于Ints,如果你有需要的话,也可以扩展这些。

 postfix operator ° protocol IntegerInitializable: ExpressibleByIntegerLiteral { init (_: Int) } extension Int: IntegerInitializable { postfix public static func °(lhs: Int) -> CGFloat { return CGFloat(lhs) * .pi / 180 } } 

使用的一些例子:

 let angle = 45° contentView.transform = CGAffineTransform(rotationAngle: 45°) let angle = 45 contentView.transform = CGAffineTransform(rotationAngle: angle°) 

警告!

这个转换太简单了(在一个已经以弧度为单位的值上),你会得到一个非常小的结果,看起来结果angular度总是为零…不要在相同的地方使用°值两次(不要转换两次)!!:

 // OBVIOUSLY WRONG! let angle = 45°° // ° used twice here // WRONG! BUT EASY TO MISS let angle = 45° // ° used here contentView.transform = CGAffineTransform(rotationAngle: angle°) // ° also used here 

创buildvariables名称时不再限制为ASCII字符,那么使用π(alt-p)如何呢?

 typealias RadianAngle = CGFloat let π = RadianAngle(M_PI) let π_x_2 = RadianAngle(M_PI * 2) let π_2 = RadianAngle(M_PI_2) let π_4 = RadianAngle(M_PI_4) extension RadianAngle { var degrees: CGFloat { return self * 180 / π } init(degrees: Int) { self = CGFloat(degrees) * π / 180 } } 

用法示例:

 let quarterCircle = RadianAngle(degrees: 90) print("quarter circle = \(quarterCircle) radians") // quarter circle = 1.5707963267949 radians let halfCircle = π print("half circle = \(halfCircle.degrees) degrees") // half circle = 180.0 degrees 

我会使用上面提到的相同的原则@ t1ser,但创build一个CGFloat的扩展,使其更容易使用度的小数(例如,你可以有一个23.4度,例如):

 extension CGFloat { func degrees() -> CGFloat { return self * .pi / 180 } init(degrees: CGFloat) { self = degrees.degrees() } } 

使用它也相当容易(主要是因为我个人不知道如何input?),如果你没有,也option+shift+8 btw):

 let degreesToConvert: CGFloat = 45.7 . . . let convertedDegrees = degreesToConvert.degrees() 

或者使用初始化程序:

 let convertedDegrees = CGFloat(degrees: 45.3)