Cómo obtener la constante matemática de PI en Swift

153

Estoy tratando de encontrar una manera de incluir la constante PI en mi código Swift . Ya he encontrado ayuda en otra respuesta, a import Darwinque sé que me da acceso a funciones C .

También revisé el Mathpaquete Darwiny encontré la siguiente declaración:

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

Entonces, supongo que hay una manera de usar PI en el código, simplemente no sé cómo ...

nburk
fuente

Respuestas:

282

Con Swift 3 y 4 , PI se define ahora como una variable estática en los tipos de números de punto flotante Double, Floaty CGFloat, por lo que no se requieren importaciones específicas de los otros:

Double.pi
Float.pi
CGFloat.pi

También tenga en cuenta que .piel compilador puede inferir el tipo real de . Entonces, en situaciones en las que está claro por el contexto que está utilizando CGFloat, por ejemplo , puede usar .pi(gracias a @Qbyte y @rickster por señalarlo en los comentarios).

Para versiones anteriores de Swift :

M_PIse definió originalmente en Darwinpero también se incluye en Foundationy UIKit, por lo que importar cualquiera de estos le dará el acceso correcto.

import Darwin // or Foundation or UIKit

let pi = M_PI

Nota: Como se señaló en los comentarios, pi también se puede usar como carácter unicode en Swift, por lo que también podría hacerlo

let π = M_PI

alt + pes el acceso directo (en teclados de EE. UU.) que creará el πcarácter unicode.

nburk
fuente
55
Como Swift es compatible con Unicode, también podría hacerlovar π = M_PI
Cyrille,
23
Como pi es una constante, parece perverso declararlo como a var. let pi = M_PI¿ Seguro ?
Grimxn
2
No necesita nada especial: Alt-p es pi por defecto.
Grimxn
3
Alt-P en un teclado estadounidense, supongo. Definitivamente no en el mío (donde invoca la ventana de impresión). Por favor, por favor, no escriba caracteres aleatorios unicode en el código. No quiero que mis colegas busquen en Google cómo escribir π cada vez que lo encuentran en el código.
Sulthan
2
Solo una nota: si se puede inferir el tipo de Pi, también puede usarlo en .pilugar de la forma larga. Por ejemplolet x = CGFloat(42) * .pi
Qbyte
15

import Darwin no es necesario, todos los M_x son visibles con el import Foundation

(Xcode versión 6.4 (6E35b))

Guyvo
fuente
1

advertencia: 'M_PI' está en desuso: utilice 'Double.pi' o '.pi' para obtener el valor del tipo correcto y evitar la conversión.

Sorprendentemente, .pi también funciona bien. M_PI está en desuso a partir de Swift 4.2.1, Xcode 10.1, que es la versión actual que estoy usando. SO, use .pi o Double.pi

Sree
fuente