extension BinaryInteger {
var degreesToradians: CGFloat { CGFloat(self) * .pi / 180 }
}
extension FloatingPoint {
var degreesToradians: Self { self * .pi / 180 }
var radiansTodegrees: Self { self * 180 / .pi }
}
45.degreesToradians // 0.7853981633974483
Int(45).degreesToradians // 0.7853981633974483
Int8(45).degreesToradians // 0.7853981633974483
Int16(45).degreesToradians // 0.7853981633974483
Int32(45).degreesToradians // 0.7853981633974483
Int64(45).degreesToradians // 0.7853981633974483
UInt(45).degreesToradians // 0.7853981633974483
UInt8(45).degreesToradians // 0.7853981633974483
UInt16(45).degreesToradians // 0.7853981633974483
UInt32(45).degreesToradians // 0.7853981633974483
UInt64(45).degreesToradians // 0.7853981633974483
Double(45).degreesToradians // 0.7853981633974483
CGFloat(45).degreesToradians // 0.7853981633974483
Float(45).degreesToradians // 0.7853981
Float80(45).degreesToradians // 0.78539816339744830963
如果要使二进制整数返回浮点类型而不是始终返回CGFloat,则可以使通用方法代替计算属性:
extension BinaryInteger {
func degreesToradians<F: FloatingPoint>() -> F { F(self) * .pi / 180 }
}
let radiansDouble: Double = 45.degreesToradians() // 0.7853981633974483
let radiansCGFloat: CGFloat = 45.degreesToradians() // 0.7853981633974483
let radiansFloat: Float = 45.degreesToradians() // 0.7853981
let radiansFloat80: Float80 = 45.degreesToradians() // 0.78539816339744830963