J'essaye de convertir ce Obj-C
code en Swift
code mais je ne sais pas quel devrait être l'équivalent de ce code?
#define DEGREES_TO_RADIANS(degrees)((M_PI * degrees)/180)
J'ai cherché sur Google et j'ai trouvé ceci
Mais je ne comprends pas comment convertir cela en Swift dans mon cas?
Réponses:
Xcode 11 • Swift 5.1 ou version ultérieure
Terrain de jeux
Si vous souhaitez que l'entier binaire renvoie un type à virgule flottante au lieu de toujours renvoyer un CGFloat, vous pouvez créer une méthode générique au lieu d'une propriété calculée:
la source
CGFloat
?Ce n'est pas exactement ce que vous avez demandé, mais dans Swift 3 / iOS 10, vous pouvez utiliser le type Mesure et faire la conversion sans connaître la formule!
la source
Apple fournit ces fonctions GLKit pour la conversion:
la source
Compile sous Swift 3 . Toujours garder toutes les valeurs, faire tous les calculs en radians avec CGFloats ..., mais rendre le code plus lisible avec les constantes en degrés. Par exemple: 90 ° Le signe ° fera comme par magie la conversion des degrés en radians.
Comment configurer cela:
Définissez et utilisez un opérateur postfix pour le signe ° . Cet opérateur effectuera la conversion des degrés en radians. Cet exemple est pour Ints, étendez-les également pour les types Float si vous en avez besoin.
Quelques exemples d'utilisation:
Avertissement!
Il est trop facile d'utiliser cette conversion deux fois (sur une valeur déjà en radians par erreur), vous obtiendrez un très petit nombre comme résultat, et apparemment l'angle résultant sera toujours nul ... NE PAS utiliser ° sur le même valeur deux fois (ne pas convertir deux fois) !!:
la source
IntegerInitializable
le protocole est inutile. Int est déjà conforme àExpressibleByIntegerLiteral
public extension FixedWidthInteger { postfix static func °<T: FloatingPoint>(lhs: Self) -> T { T(lhs) * .pi / 180 } }
let angle: CGFloat = 45°
. Mais il n'est pas nécessaire là où il attend un typeCGFloat
ou n'importe quelFloatingPoint
typeCGAffineTransform(rotationAngle: 45°)
Aussi, pour convertir des radians de fron en degrés (si quelqu'un tombe sur cela sur google):
la source
Vous n'êtes plus limité aux caractères ASCII lors de la création de noms de variables, alors que diriez-vous de cela en utilisant π (alt-p):
Exemple d'utilisation:
la source
Swift 4.2
Vous pouvez écrire des fonctions génériques globales:
Exemple:
Au cas où vous ne voudriez pas étendre tous vos types flottants comme celui-ci
la source
return .pi * degrees / 180
?T
c'est duFloatingPoint
type et 180 est duInt
type. Dans Swift, vous ne pouvez pas faire de calculs sur différents types.J'utiliserais le même principe @ t1ser mentionné ci-dessus, mais créerais une extension de
CGFloat
pour faciliter l'utilisation des décimales pour le degré également (vous pouvez donc avoir 23,4 degrés, par exemple):L'utiliser serait également assez facile (principalement parce que personnellement je ne savais pas comment taper ° 😜 - au cas où vous ne l'auriez pas non plus, c'est
option+shift+8
btw):Ou pour utiliser l'initialiseur:
la source
rapide 2.3
la source