A type with values that support multiplication.


protocol Numeric


The Numeric protocol provides a suitable basis for arithmetic on scalar values, such as integers and floating-point numbers. You can write generic methods that operate on any numeric type in the standard library by using the Numeric protocol as a generic constraint.

The following example extends Sequence with a method that returns an array with the sequence’s values multiplied by two.

extension Sequence where Element: Numeric {
    func doublingAll() -> [Element] {
        return map { $0 * 2 }

With this extension, any sequence with elements that conform to Numeric has the doublingAll() method. For example, you can double the elements of an array of doubles or a range of integers:

let observations = [1.5, 2.0, 3.25, 4.875, 5.5]
let doubledObservations = observations.doublingAll()
// doubledObservations == [3.0, 4.0, 6.5, 9.75, 11.0]

let integers = 0..<8
let doubledIntegers = integers.doublingAll()
// doubledIntegers == [0, 2, 4, 6, 8, 10, 12, 14]

Conforming to the Numeric Protocol

To add Numeric protocol conformance to your own custom type, implement the required initializer and operators, and provide a magnitude property using a type that can represent the magnitude of any value of your custom type.


Associated Types

associatedtype Magnitude

A type that can represent the absolute value of any possible value of the conforming type.



init?<T>(exactly: T)

Creates a new instance from the given integer, if it can be represented exactly.


Instance Properties

var magnitude: Self.Magnitude

The magnitude of this value.


Operator Functions

static func * (Self, Self) -> Self

Multiplies two values and produces their product.


static func *= (inout Self, Self)

Multiplies two values and stores the result in the left-hand-side variable.


See Also

Basic Arithmetic

protocol AdditiveArithmetic

A type with values that support addition and subtraction.

protocol SignedNumeric

A type that can represent both positive and negative values.

protocol Strideable

A type representing continuous, one-dimensional values that can be offset and measured.