Estoy tratando de convertir este Obj-C
código en Swift
código, pero no sé cuál debería ser el equivalente de este código.
#define DEGREES_TO_RADIANS(degrees)((M_PI * degrees)/180)
Busqué en Google y encontré esto
¿Pero no entiendo cómo convertir eso en Swift en mi caso?
Respuestas:
Xcode 11 • Swift 5.1 o posterior
Patio de recreo
Si desea que el entero binario devuelva un tipo de punto flotante en lugar de devolver siempre un CGFloat, puede crear un método genérico en lugar de una propiedad calculada:
fuente
CGFloat
?Esto no es exactamente lo que pidió, pero en Swift 3 / iOS 10, puede usar el tipo de medición y realizar la conversión sin conocer la fórmula.
fuente
Apple proporciona estas funciones GLKit para la conversión:
fuente
Compila bajo Swift 3 . Conserve todos los valores, haga todos los cálculos en radianes con CGFloats ..., pero haga que el código sea más legible con las constantes en grados. Por ejemplo: 90 ° El signo ° hará mágicamente la conversión de grados a radianes.
Cómo configurar esto:
Defina y use un operador de sufijo para el signo ° . Este operador hará la conversión de grados a radianes. Este ejemplo es para Ints, extiéndalos también para los tipos Float si es necesario.
Algunos ejemplos de uso:
¡Advertencia!
Es demasiado fácil usar esta conversión dos veces (en un valor que ya está en radianes por error), obtendrá un número muy pequeño como resultado, y aparentemente el ángulo resultante será siempre cero ... NO use ° en el mismo valor dos veces (no convertir dos veces) !!:
fuente
IntegerInitializable
el protocolo es inútil. Int ya cumple conExpressibleByIntegerLiteral
public extension FixedWidthInteger { postfix static func °<T: FloatingPoint>(lhs: Self) -> T { T(lhs) * .pi / 180 } }
let angle: CGFloat = 45°
. Pero no es necesario donde espera un tipoCGFloat
o cualquier otroFloatingPoint
CGAffineTransform(rotationAngle: 45°)
Además, para convertir de radianes a grados (si alguien se encuentra con esto en Google):
fuente
Ya no está limitado a los caracteres ASCII al crear nombres de variables, entonces, ¿qué tal si usa π (alt-p):
Uso de ejemplo:
fuente
Rápido 4.2
Puede escribir funciones genéricas globales:
Ejemplo:
En caso de que no desee ampliar todos sus tipos flotantes como este
fuente
return .pi * degrees / 180
?T
esFloatingPoint
tipo y 180 esInt
tipo. En Swift no se pueden hacer cálculos sobre diferentes tipos.Usaría el mismo principio @ t1ser mencionado anteriormente, pero crearía una extensión de
CGFloat
para facilitar el uso de decimales para el grado también (por lo que podría tener 23.4 grados, por ejemplo):Usarlo también sería bastante fácil (principalmente porque personalmente no sabía cómo escribir ° 😜; en caso de que tú tampoco, por
option+shift+8
cierto):O para usar el inicializador:
fuente
rápido 2.3
fuente