Variadic parameters let you pass any number of values to a function without making many versions of it.
Variadic parameters in Swift
func functionName(parameterName: Type...) { // code using parameterName as an array }
The three dots ... after the type means the parameter can take many values.
Inside the function, the variadic parameter acts like an array of that type.
func greet(names: String...) { for name in names { print("Hello, \(name)!") } }
func sum(numbers: Int...) -> Int { var total = 0 for number in numbers { total += number } return total }
This program defines a function that prints all scores passed to it. Then it calls the function with four scores.
func printScores(scores: Int...) { print("Scores received:") for score in scores { print(score) } } printScores(scores: 85, 90, 78, 92)
You can only have one variadic parameter in a function, and it must be last.
Variadic parameters are treated like arrays inside the function, so you can use loops and array methods on them.
Variadic parameters let functions accept any number of values of the same type.
Use Type... in the function parameter to declare a variadic parameter.
Inside the function, the variadic parameter works like an array.
Practice
Solution
Step 1: Understand variadic parameter purpose
Variadic parameters let a function accept zero or more values of the same type.Step 2: Compare options with definition
Only Accept any number of values of the same type correctly describes this behavior.Final Answer:
Accept any number of values of the same type -> Option BQuick Check:
Variadic parameter = multiple values [OK]
- Confusing variadic with multiple return values
- Thinking it accepts different types
- Assuming it limits arguments
Solution
Step 1: Recall variadic syntax in Swift
Variadic parameters use three dots (...) after the type.Step 2: Check each option
func sum(numbers: Int...) { } uses 'Int...' which is correct syntax for variadic parameters.Final Answer:
func sum(numbers: Int...) { } -> Option CQuick Check:
Variadic syntax = Type... [OK]
- Using asterisk (*) instead of three dots
- Using array type instead of variadic
- Missing dots after type
func greet(names: String...) {
for name in names {
print("Hello, \(name)!")
}
}
greet(names: "Anna", "Bob")Solution
Step 1: Understand variadic parameter behavior
The parameter 'names' collects all arguments into an array of strings.Step 2: Trace the for loop output
The loop prints "Hello, Anna!" and then "Hello, Bob!" each on a new line.Final Answer:
Hello, Anna!\nHello, Bob! -> Option AQuick Check:
Variadic parameter prints each argument separately [OK]
- Thinking it prints all names in one line
- Assuming a syntax error
- Confusing parameter name with output
func multiply(numbers: Int...) -> Int {
var result = 1
for i in 0..Solution
Step 1: Analyze function call
The call 'multiply(numbers: )' passes no arguments, which is allowed but syntax requires no empty parentheses.Step 2: Understand Swift call syntax for variadic
Calling with empty parentheses after variadic parameter name is invalid; omit arguments or provide values.Final Answer:
Calling multiply without any arguments causes an error -> Option DQuick Check:
Empty variadic call syntax invalid [OK]
- Thinking for loop is wrong
- Believing Int can't be variadic
- Missing return statement error
Solution
Step 1: Use variadic parameter syntax
func average(numbers: Int...) -> Double { Double(numbers.reduce(0, +)) / Double(numbers.count) } correctly uses 'Int...' to accept any number of integers.Step 2: Calculate average as Double
It sums all numbers and divides by count, converting to Double for decimal average.Final Answer:
func average(numbers: Int...) -> Double { Double(numbers.reduce(0, +)) / Double(numbers.count) } -> Option AQuick Check:
Variadic + Double average calculation = func average(numbers: Int...) -> Double { Double(numbers.reduce(0, +)) / Double(numbers.count) } [OK]
- Using array instead of variadic parameter
- Returning Int instead of Double for average
- Using invalid syntax like Int*
Ready to prove it?
Pass the test and this pattern moves unknown
