Как получить математическую константу PI в Swift

153

Я пытаюсь найти способ включить константу PI в мой код Swift . Я уже нашел помощь в другом ответе, import Darwinкоторый, как я знаю, дает мне доступ к функциям C .

Я также проверил Mathпакет Darwinи наткнулся на следующее объявление:

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

Итак, я предполагаю, что есть способ использовать PI в коде, я просто не знаю, как ...

nburk
источник

Ответы:

282

В Swift 3 и 4 pi теперь определяется как статическая переменная для типов чисел с плавающей запятой Double, Floatи CGFloat, следовательно, больше не требуется никакого конкретного импорта:

Double.pi
Float.pi
CGFloat.pi

Также обратите внимание, что фактический тип .piможет быть выведен компилятором. Таким образом, в ситуациях, когда это ясно из контекста, который вы используете, например CGFloat, вы можете просто использовать .pi(спасибо @Qbyte и @rickster за то, что указали это в комментариях).

Для более старых версий Swift :

M_PIизначально определен в, Darwinно также содержится в Foundationи UIKit, поэтому импорт любого из них предоставит вам правильный доступ.

import Darwin // or Foundation or UIKit

let pi = M_PI

Примечание: как отмечено в комментариях, пи также может использоваться как символ Юникода в Swift, так что вы можете также сделать

let π = M_PI

alt + pэто ярлык (на US-клавиатурах), который создаст πсимвол Unicode.

nburk
источник
5
Поскольку Swift поддерживает Unicode, вы также можете сделать этоvar π = M_PI
Cyrille
23
Поскольку pi является константой, объявлять ее как a кажется извращенной var. Конечно let pi = M_PI?
Grimxn
2
Вам не нужно ничего особенного - по умолчанию Alt-p - это pi.
Grimxn
3
Alt-P на клавиатуре США, я полагаю? Определенно не на моем (где это вызывает окно печати). Пожалуйста, не пишите случайные символы Юникода в коде. Я не хочу, чтобы мои коллеги искали, как писать π каждый раз, когда они находят это в коде.
Sulthan 12.12.14
2
Просто примечание: если можно определить тип Пи, вы также можете использовать .piвместо длинной формы. Напримерlet x = CGFloat(42) * .pi
Qbyte
15

import Darwin не нужно все M_x видны с import Foundation

(Версия Xcode 6.4 (6E35b))

Guyvo
источник
1

предупреждение: «M_PI» устарел: используйте «Double.pi» или «.pi», чтобы получить значение правильного типа и избежать приведения.

Удивительно, но .pi тоже отлично работает. M_PI устарел с Swift 4.2.1, Xcode 10.1, которая является текущей версией, которую я использую. SO, используйте .pi или Double.pi

Sree
источник