How to get mathemical PI constant in Swift

SwiftMathDarwin

Swift Problem Overview


I am trying to find a way to include the PI constant in my Swift code. I already found help in another answer, to import Darwin which I know gives me access to C functions.

I also checked the Math package in Darwin and came across the following declaration:

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

So, I assume there is a way to use PI in the code, I just don't know how...

Swift Solutions


Solution 1 - Swift

With Swift 3 & 4, pi is now defined as a static variable on the floating point number types Double, Float and CGFloat, so no specific imports are required any more:

Double.pi
Float.pi
CGFloat.pi

Also note that the actual type of .pi can be inferred by the compiler. So, in situations where it's clear from the context that you are using e.g. CGFloat, you can just use .pi (thanks to @Qbyte and @rickster for pointing that out in the comments).

For older versions of Swift:

M_PI is originally defined in Darwin but is also contained in Foundation and UIKit, so importing any of these will give you the right access.

import Darwin // or Foundation or UIKit

let pi = M_PI

Note: As noted in the comments, pi can also be used as unicode character in Swift, so you might as well do

let π = M_PI

alt + p is the shortcut (on US-keyboards) that will create the π unicode character.

Solution 2 - Swift

import Darwin is not needed all M_x are visible with the import Foundation

( Xcode Version 6.4 (6E35b) )

Solution 3 - Swift

warning: 'M_PI' is deprecated: Please use 'Double.pi' or '.pi' to get the value of correct type and avoid casting.

surprisingly, .pi also works fine. M_PI is deprecated as of Swift 4.2.1, Xcode 10.1, which is the current version I am using. SO, Use .pi, or Double.pi

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionnburkView Question on Stackoverflow
Solution 1 - SwiftnburkView Answer on Stackoverflow
Solution 2 - SwiftGuyvoView Answer on Stackoverflow
Solution 3 - SwiftSreeView Answer on Stackoverflow