A type with values that support multiplication.

    protocol Numeric : AdditiveArithmetic, ExpressibleByIntegerLiteral

    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.



    Citizens in Swift


    Extension in Atomics


    • protocol AtomicInteger

      A type that supports atomic integer operations through a separate atomic storage representation.

    Extension in RealModule


    Extension in RealModule

    where Self.Magnitude:FloatingPoint