Como obter PI matemático constante no Swift

153

Estou tentando encontrar uma maneira de incluir a constante PI no meu código Swift . Eu já encontrei ajuda em outra resposta, para import Darwinque eu sei que me dá acesso a funções C .

Também verifiquei o Mathpacote Darwine me deparei com a seguinte declaração:

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

Então, presumo que exista uma maneira de usar o PI no código, simplesmente não sei como ...

nburk
fonte

Respostas:

282

Com Swift 3 e 4 , pi é agora definida como uma variável estática sobre os tipos de números de ponto flutuante Double, Floate CGFloat, por isso, há importações específicas são necessárias mais:

Double.pi
Float.pi
CGFloat.pi

Observe também que o tipo real de .pipode ser inferido pelo compilador. Portanto, em situações em que é claro a partir do contexto que você está usando CGFloat, por exemplo , você pode simplesmente usar .pi(obrigado a @Qbyte e @rickster por apontar isso nos comentários).

Para versões mais antigas do Swift :

M_PIé originalmente definido em, Darwinmas também está contido em Foundatione UIKit, portanto, a importação de qualquer um desses itens fornecerá o acesso correto.

import Darwin // or Foundation or UIKit

let pi = M_PI

Nota: Conforme observado nos comentários, o pi também pode ser usado como caractere unicode no Swift, então você também pode

let π = M_PI

alt + pé o atalho (nos teclados americanos) que criará o πcaractere unicode.

nburk
fonte
5
Como Swift suporta Unicode, você também pode fazervar π = M_PI
Cyrille
23
Como pi é uma constante, parece perverso declará-lo como a var. Certamente let pi = M_PI?
Grimxn
2
Você não precisa de nada de especial - Alt-p é pi por padrão.
Grimxn
3
Alt-P em um teclado americano, presumo? Definitivamente não está no meu (onde ele invoca a janela de impressão). Por favor, não escreva caracteres unicode aleatórios no código. Não quero que meus colegas pesquisem no Google como escrever π sempre que o encontrarem no código.
Sulthan
2
Apenas uma observação: se o tipo de Pi puder ser inferido, você também poderá usar em .pivez da forma longa. Exemplolet x = CGFloat(42) * .pi
Qbyte
15

import Darwin não é necessário todos os M_x são visíveis com o import Foundation

(Versão Xcode 6.4 (6E35b))

Guyvo
fonte
1

aviso: 'M_PI' foi descontinuado: use 'Double.pi' ou '.pi' para obter o valor do tipo correto e evitar a transmissão.

surpreendentemente, .pi também funciona bem. M_PI está obsoleto no Swift 4.2.1, Xcode 10.1, que é a versão atual que estou usando. SO, use .pi ou Double.pi

Sree
fonte