crashoverride777 - 8 months ago 36

Swift Question

What does the ... syntax mean in function parameters

For example

`func setupViews(views: UIView...) {`

...

}

I saw this in some tutorial recently and as far as I understand its just an array of UIViews.

So is it the same as writing

`func setupViews(views: [UIView]) {`

...

}

or is there a difference?

Answer

It represents a Variadic Paramater, from the docs:

A variadic parameter accepts zero or more values of a specified type. You use a variadic parameter to specify that the parameter can be passed a varying number of input values when the function is called. Write variadic parameters by inserting three period characters (

`...`

) after the parameter’s type name.The values passed to a variadic parameter are made available within the function’s body as an array of the appropriate type. For example, a variadic parameter with a name of numbers and a type of

`Double...`

is made available within the function’s body as a constant array called numbers of type`[Double]`

.The example below calculates the arithmetic mean (also known as the average) for a list of numbers of any length:

`func arithmeticMean(numbers: Double...) -> Double { var total: Double = 0 for number in numbers { total += number } return total / Double(numbers.count) } arithmeticMean(1, 2, 3, 4, 5) // returns 3.0, which is the arithmetic mean of these five numbers arithmeticMean(3, 8.25, 18.75) // returns 10.0, which is the arithmetic mean of these three numbers`

You can only have one Variadic Param per function.

As you can see, there is a subtle difference between an input paramater of `[Double]`

and `Double...`

**When using a function with a Variadic parameter you don't need to pass the objects/values as an array.**

Food for thought; How would you call this method? `func arithmeticMean(numbers: [Double]...) -> Double`

Like so:

```
arithmeticMean([1, 2, 3, 4, 5], [5, 4, 3, 2, 1]) // you could keep adding more and more arrays here if desired.
```

In this example 'numbers' would be an array of double arrays.