Dha*_*esh 100 macos macros objective-c ios swift
我试图将此Obj-C代码转换为Swift代码,但我不知道这段代码的等价物应该是什么?
#define DEGREES_TO_RADIANS(degrees)((M_PI * degrees)/180)
Run Code Online (Sandbox Code Playgroud)
我用Google搜索并找到了这个
但我不明白在我的情况下如何在Swift中转换它?
Leo*_*bus 247
Xcode 10•Swift 4.2或更高版本
extension BinaryInteger {
var degreesToRadians: CGFloat { return CGFloat(self) * .pi / 180 }
}
extension FloatingPoint {
var degreesToRadians: Self { return self * .pi / 180 }
var radiansToDegrees: Self { return self * 180 / .pi }
}
Run Code Online (Sandbox Code Playgroud)
操场
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
Run Code Online (Sandbox Code Playgroud)
mat*_*att 58
这与你提出的不完全相同,但在Swift 3/iOS 10中,你可以使用Measurement类型并在不知道公式的情况下进行转换!
let result = Measurement(value: 45, unit: UnitAngle.degrees)
.converted(to: .radians).value
Run Code Online (Sandbox Code Playgroud)
Cra*_*lot 42
Apple 为转换提供了这些GLKit函数:
func GLKMathDegreesToRadians(_ degrees: Float) -> Float
func GLKMathRadiansToDegrees(_ radians: Float) -> Float
Run Code Online (Sandbox Code Playgroud)
t1s*_*ser 16
let angle = 45° // angle will be in radians, 45 is in degrees
Run Code Online (Sandbox Code Playgroud)
在Swift 3下编译.仍保留所有值,使用CGFloats以弧度进行所有计算...,但使用常量度数使代码更具可读性.例如:90 °°符号会神奇地对弧度进行转换.
如何设置:
为°符号定义并使用后缀运算符.此运算符将执行从度到弧度的转换.此示例适用于Ints,如果您有需要,还可以为Float类型扩展它们.
postfix operator °
protocol IntegerInitializable: ExpressibleByIntegerLiteral {
init (_: Int)
}
extension Int: IntegerInitializable {
postfix public static func °(lhs: Int) -> CGFloat {
return CGFloat(lhs) * .pi / 180
}
}
Run Code Online (Sandbox Code Playgroud)
一些使用示例:
let angle = 45°
contentView.transform = CGAffineTransform(rotationAngle: 45°)
let angle = 45
contentView.transform = CGAffineTransform(rotationAngle: angle°)
Run Code Online (Sandbox Code Playgroud)
警告!
很容易使用这个转换两次(在错误的弧度值上),结果会得到一个非常小的数字,看起来结果的角度总是为零......不要在相同的情况下使用°值两次(不转换两次)!!:
// 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
Run Code Online (Sandbox Code Playgroud)
nik*_*ans 11
此外,要将fron弧度转换为度数(如果有人在谷歌上发现这一点):
var degrees = radians * (180.0 / M_PI)
Run Code Online (Sandbox Code Playgroud)
在度数和弧度之间转换 Double 的最有效和准确的方法:
import Foundation
extension Double {
var radians: Double { return Measurement(value: self, unit: UnitAngle.degrees).converted(to: UnitAngle.radians).value }
var degrees: Double { return Measurement(value: self, unit: UnitAngle.radians).converted(to: UnitAngle.degrees).value }
}
Run Code Online (Sandbox Code Playgroud)
Apple 的基金会团队很早就解决了这个问题,开发了一种超越所有其他解决方案的解决方案: