Skip to content

simplisticated/SwiftyAlgebra

Folders and files

NameName
Last commit message
Last commit date

Latest commit

author
Igor Matyushkin
Apr 28, 2018
099cca0 · Apr 28, 2018

History

50 Commits
Apr 25, 2018
Apr 26, 2018
Apr 25, 2018
Apr 5, 2018
Apr 5, 2018
Apr 25, 2018
Apr 28, 2018

Repository files navigation

SwiftyAlgebra

At a Glance

Provides set of tools for managing numbers in Swift.

How To Get Started

  • Copy content of Source folder to your project.

or

  • Use SwiftyAlgebra cocoapod

Requirements

  • iOS 9 and later
  • Xcode 9 and later
  • Swift 4

Usage

Introduction to Numbers

Instead of using many separate primitive numeric types, SwiftyAlgebra uses a universal type named Number which is working with all primitive types like Double values under the hood. The Number class is highly compatible with primitive types and currently supports:

  • Int
  • Float
  • Double

Initializing new number is pretty simple:

let integerNumber = Number(value: 10)

let someFloatValue: Float = 4.3
let floatNumber = Number(value: someFloatValue)

let doubleNumber = Number(value: 9.124)

Also, you can get primitive value back easily:

let number = Number(value: 9.124)
number.int // 9
number.float // 9.124
number.double // 9.124

Integer numbers

Check if number is integer:

let double1 = Number(value: 9.124)
double1.isInteger // false

let double2 = Number(value: 9.0)
double2.isInteger // true

Check if number is natural:

let int = Number(value: -20)
int1.isNatural // false

let double = Number(value: 20.0)
double.isNatural // true

Check if number is prime:

let int1 = Number(value: 10)
int1.isPrime // false

let int2 = Number(value: 3)
int2.isPrime // true

Natural divisors:

let int = Number(value: 16)
let divisors = int.naturalDivisors // [1, 2, 4, 8, 16]

Prime divisors:

let int = Number(value: 150)
let divisors = int.primeDivisors // [2, 3, 5]

Prime factorization:

let int = Number(value: 150)
let divisors = int.primeFactorization // [2, 3, 5, 5]

Operators

One Number can be easily added to another:

let ten = Number(value: 10)
let two = Number(value: 2)
let sum = ten + two
sum.int // 12

In purpose of better compatibility with primitive numeric types, SwiftyAlgebra provides set of operators that might be helpful when you need to use Number and primitive variable in the same expression:

let number = Number(value: 10) + 2
number.int // 12

Full list of supported operators:

Left Type Operator Right Type Example
Addition
Number + Number Number(value: 10) + Number(value: 2)
Number + Int Number(value: 10) + 2
Number + Float Number(value: 10) + 2.0
Number + Double Number(value: 10) + 2.0
Int + Number 10 + Number(value: 2)
Float + Number 10.0 + Number(value: 2)
Double + Number 10.0 + Number(value: 2)
Number += Number Number(value: 10.0) += Number(value: 2)
Number += Int Number(value: 10.0) += 2
Number += Float Number(value: 10.0) += 2.0
Number += Double Number(value: 10.0) += 2.0
Int += Number var value: Int = 10; value += Number(value: 2)
Float += Number var value: Float = 10.0; value += Number(value: 2.0)
Float += Number var value: Double = 10.0; value += Number(value: 2.0)
Float ++ None let number = Number(value: 10); number++
Subtraction
Number - Number Number(value: 10) - Number(value: 2)
Number - Int Number(value: 10) - 2
Number - Float Number(value: 10) - 2.0
Number - Double Number(value: 10) - 2.0
Int - Number 10 - Number(value: 2)
Float - Number 10.0 - Number(value: 2)
Double - Number 10.0 - Number(value: 2)
Number -= Number Number(value: 10.0) -= Number(value: 2)
Number -= Int Number(value: 10.0) -= 2
Number -= Float Number(value: 10.0) -= 2.0
Number -= Double Number(value: 10.0) -= 2.0
Int -= Number var value: Int = 10; value -= Number(value: 2)
Float -= Number var value: Float = 10.0; value -= Number(value: 2.0)
Float -= Number var value: Double = 10.0; value -= Number(value: 2.0)
Float -- None let number = Number(value: 10); number--
Multiplication
Number * Number Number(value: 10) * Number(value: 2)
Number * Int Number(value: 10) * 2
Number * Float Number(value: 10) * 2.0
Number * Double Number(value: 10) * 2.0
Int * Number 10 * Number(value: 2)
Float * Number 10.0 * Number(value: 2)
Double * Number 10.0 * Number(value: 2)
Number *= Number Number(value: 10.0) *= Number(value: 2)
Number *= Int Number(value: 10.0) *= 2
Number *= Float Number(value: 10.0) *= 2.0
Number *= Double Number(value: 10.0) *= 2.0
Int *= Number var value: Int = 10; value *= Number(value: 2)
Float *= Number var value: Float = 10.0; value *= Number(value: 2.0)
Float *= Number var value: Double = 10.0; value *= Number(value: 2.0)
Division
Number / Number Number(value: 10) / Number(value: 2)
Number / Int Number(value: 10) / 2
Number / Float Number(value: 10) / 2.0
Number / Double Number(value: 10) / 2.0
Int / Number 10 / Number(value: 2)
Float / Number 10.0 / Number(value: 2)
Double / Number 10.0 / Number(value: 2)
Number /= Number Number(value: 10.0) /= Number(value: 2)
Number /= Int Number(value: 10.0) /= 2
Number /= Float Number(value: 10.0) /= 2.0
Number /= Double Number(value: 10.0) /= 2.0
Int /= Number var value: Int = 10; value /= Number(value: 2)
Float /= Number var value: Float = 10.0; value /= Number(value: 2.0)
Float /= Number var value: Double = 10.0; value /= Number(value: 2.0)

License

SwiftyAlgebra is available under the MIT license. See the LICENSE file for more info.