So erhalten Sie eine mathematische PI-Konstante in Swift

153

Ich versuche einen Weg zu finden, die PI-Konstante in meinen Swift-Code aufzunehmen . Ich habe bereits in einer anderen Antwort Hilfe gefunden, auf import Darwindie ich Zugriff auf C-Funktionen habe .

Ich habe auch das MathPaket eingecheckt Darwinund bin auf folgende Erklärung gestoßen:

var M_PI: Double { get } /* pi */

Ich gehe also davon aus, dass es eine Möglichkeit gibt, PI im Code zu verwenden. Ich weiß nur nicht, wie ...

nburk
quelle

Antworten:

282

Mit Swift 3 und 4 wird nun pi als statischen Variable auf dem Gleitkommazahl Typ definiert Double, Floatund CGFloat, so werden keine spezifischen Importe mehr erforderlich:

Double.pi
Float.pi
CGFloat.pi

Beachten Sie auch, dass .pider Compiler den tatsächlichen Typ von ableiten kann. In Situationen, in denen aus dem Kontext klar hervorgeht, dass Sie z. B. verwenden CGFloat, können Sie einfach verwenden .pi(danke an @Qbyte und @rickster, die in den Kommentaren darauf hingewiesen haben).

Für ältere Versionen von Swift :

M_PIist ursprünglich in definiert, Darwinaber auch in Foundationund enthalten. UIKitWenn Sie also eines dieser Elemente importieren, erhalten Sie den richtigen Zugriff.

import Darwin // or Foundation or UIKit

let pi = M_PI

Hinweis: Wie in den Kommentaren erwähnt, kann pi in Swift auch als Unicode- Zeichen verwendet werden

let π = M_PI

alt + pist die Verknüpfung (auf US-Tastaturen), mit der das πUnicode-Zeichen erstellt wird.

nburk
quelle
5
Da Swift Unicode unterstützt, können Sie dies auch tunvar π = M_PI
Cyrille
23
Da pi eine Konstante ist, erscheint es pervers, sie als zu deklarieren var. Sicher let pi = M_PI?
Grimxn
2
Sie brauchen nichts Besonderes - Alt-p ist standardmäßig pi.
Grimxn
3
Alt-P auf einer US-Tastatur, nehme ich an? Auf keinen Fall bei mir (wo es das Druckfenster aufruft). Bitte, bitte, schreibe keine zufälligen Unicode-Zeichen in den Code. Ich möchte nicht, dass meine Kollegen jedes Mal googeln, wenn sie es im Code finden.
Sulthan
2
Nur eine Anmerkung: Wenn der Typ von Pi abgeleitet werden kann, können Sie auch .pianstelle der langen Form verwenden. ZBlet x = CGFloat(42) * .pi
Qbyte
15

import Darwin wird nicht benötigt alle M_x sind mit dem sichtbar import Foundation

(Xcode Version 6.4 (6E35b))

Guyvo
quelle
1

Warnung: 'M_PI' ist veraltet: Bitte verwenden Sie 'Double.pi' oder '.pi', um den Wert des richtigen Typs zu erhalten und das Casting zu vermeiden.

überraschenderweise funktioniert .pi auch gut. M_PI ist ab Swift 4.2.1, Xcode 10.1, der aktuellen Version, die ich verwende, veraltet. Verwenden Sie also .pi oder Double.pi

Sree
quelle