Ich versuche, diesen Obj-C
Code in Swift
Code umzuwandeln , weiß aber nicht, wie dieser Code aussehen soll.
#define DEGREES_TO_RADIANS(degrees)((M_PI * degrees)/180)
Ich googeln und fand diese
Aber ich verstehe nicht, wie ich das in meinem Fall in Swift umwandeln soll?
Antworten:
Xcode 11 • Swift 5.1 oder höher
Spielplatz
Wenn Sie möchten, dass die binäre Ganzzahl einen Gleitkommatyp zurückgibt, anstatt immer ein CGFloat zurückzugeben, können Sie anstelle einer berechneten Eigenschaft eine generische Methode erstellen:
quelle
CGFloat
?Dies ist nicht identisch mit dem, was Sie gefragt haben, aber in Swift 3 / iOS 10 können Sie den Messtyp verwenden und die Konvertierung durchführen, ohne die Formel zu kennen!
quelle
Apple bietet diese GLKit-Funktionen für die Konvertierung an:
quelle
Kompiliert unter Swift 3 . Behalten Sie weiterhin alle Werte bei, führen Sie alle Berechnungen im Bogenmaß mit CGFloats durch ..., aber machen Sie den Code mit den Konstanten in Grad besser lesbar. Zum Beispiel: 90 ° Das ° -Zeichen bewirkt auf magische Weise die Umrechnung von Grad in Bogenmaß.
So richten Sie dies ein:
Definieren und verwenden Sie einen Postfix-Operator für das ° -Zeichen. Dieser Operator führt die Umrechnung von Grad in Bogenmaß durch. Dieses Beispiel gilt für Ints. Erweitern Sie diese bei Bedarf auch für die Float-Typen.
Einige Anwendungsbeispiele:
Warnung!
Es ist zu einfach, diese Konvertierung zweimal zu verwenden (bei einem Wert, der bereits versehentlich im Bogenmaß vorliegt). Als Ergebnis erhalten Sie eine sehr kleine Zahl, und der resultierende Winkel scheint immer Null zu sein. Verwenden Sie ° NICHT für denselben Wert Wert zweimal (nicht zweimal konvertieren) !!:
quelle
IntegerInitializable
Protokoll ist sinnlos. Int entspricht bereitsExpressibleByIntegerLiteral
public extension FixedWidthInteger { postfix static func °<T: FloatingPoint>(lhs: Self) -> T { T(lhs) * .pi / 180 } }
let angle: CGFloat = 45°
. Aber es wird nicht benötigt, wenn es einenCGFloat
oder einen anderenFloatingPoint
Typ erwartetCGAffineTransform(rotationAngle: 45°)
Um das Bogenmaß in Grad umzurechnen (falls jemand bei Google darauf stößt):
quelle
Sie sind beim Erstellen von Variablennamen nicht mehr auf ASCII-Zeichen beschränkt. Wie wäre es also mit π (alt-p):
Anwendungsbeispiel:
quelle
Swift 4.2
Sie können globale generische Funktionen schreiben:
Beispiel:
Für den Fall, dass Sie nicht alle Ihre schwebenden Typen wie diese erweitern möchten
quelle
return .pi * degrees / 180
?T
istFloatingPoint
Typ und 180 istInt
Typ. In Swift können Sie keine Berechnungen für verschiedene Typen durchführen.Ich würde das oben erwähnte Prinzip @ t1ser verwenden, aber eine Erweiterung von erstellen
CGFloat
, um die Verwendung von Dezimalstellen für den Abschluss zu vereinfachen (so könnten Sie beispielsweise 23,4 Grad haben):Es wäre auch ziemlich einfach (hauptsächlich, weil ich persönlich nicht wusste, wie man ° 😜 eingibt - falls Sie es auch nicht getan haben, ist es
option+shift+8
übrigens):Oder um den Initialisierer zu verwenden:
quelle
schnell 2.3
quelle