Jak uzyskać matematyczną stałą PI w języku Swift

153

Próbuję znaleźć sposób na uwzględnienie stałej PI w moim kodzie Swift . I już znaleźć pomoc w innej odpowiedzi, do import Darwinktórych znam daje mi dostęp do funkcji C .

Sprawdziłem też Mathpaczkę Darwini natknąłem się na następującą deklarację:

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

Więc zakładam, że istnieje sposób na użycie PI w kodzie, po prostu nie wiem jak ...

nburk
źródło

Odpowiedzi:

282

Z Swift 3 & 4 , pi jest teraz zdefiniowany jako zmiennej statycznej na zmiennej typu numer punktu Double, Floata CGFloat, więc nie są wymagane szczególne importuje więcej:

Double.pi
Float.pi
CGFloat.pi

Należy również zauważyć, że .pikompilator może wywnioskować rzeczywisty typ . Tak więc w sytuacjach, w których jasno wynika z kontekstu, którego używasz, np. CGFloatMożesz po prostu użyć .pi(dzięki @Qbyte i @rickster za wskazanie tego w komentarzach).

W przypadku starszych wersji Swift :

M_PIjest pierwotnie zdefiniowane w Darwinale jest również zawarta w Foundationi UIKit, więc importowanie każdy z nich daje prawo dostępu.

import Darwin // or Foundation or UIKit

let pi = M_PI

Uwaga: jak zauważono w komentarzach, pi może być również używany jako znak Unicode w Swift, więc równie dobrze możesz

let π = M_PI

alt + pto skrót (na klawiaturach amerykańskich), który utworzy πznak Unicode.

nburk
źródło
5
Ponieważ Swift obsługuje Unicode, możesz również zrobićvar π = M_PI
Cyrille
23
Ponieważ pi jest stałą, deklarowanie jej jako a wydaje się przewrotne var. Na pewno let pi = M_PI?
Grimxn
2
Nie potrzebujesz nic specjalnego - Alt-p to domyślnie pi.
Grimxn
3
Zakładam, że Alt-P na klawiaturze amerykańskiej? Zdecydowanie nie w moim (gdzie wywołuje okno drukowania). Proszę, nie pisz w kodzie losowych znaków Unicode. Nie chcę, aby moi koledzy szukali w Google, jak pisać π za każdym razem, gdy znajdą to w kodzie.
Sulthan
2
Uwaga: jeśli można wywnioskować typ Pi, możesz również użyć .pizamiast długiej formy. Np.let x = CGFloat(42) * .pi
Qbyte
15

import Darwin nie jest potrzebne, wszystkie M_x są widoczne z rozszerzeniem import Foundation

(Xcode wersja 6.4 (6E35b))

Guyvo
źródło
1

ostrzeżenie: „M_PI” jest przestarzałe: użyj „Double.pi” lub „.pi”, aby uzyskać wartość prawidłowego typu i uniknąć rzutowania.

O dziwo, .pi też działa dobrze. M_PI jest przestarzałe od Swift 4.2.1, Xcode 10.1, czyli obecnej wersji, której używam. SO, użyj .pi lub Double.pi

Sree
źródło