变量参数
有时,无法列出函数可能需要的参数数量。考虑一个 sum
函数:
func sum(_ a: Int, _ b: Int) -> Int {
return a + b
}
这适用于查找两个数字的总和,但是为了找到三个的总和,我们必须编写另一个函数:
func sum(_ a: Int, _ b: Int, _ c: Int) -> Int {
return a + b + c
}
一个有四个参数需要另外一个,依此类推。Swift 可以使用三个周期的序列来定义具有可变数量参数的函数:...
。例如,
func sum(_ numbers: Int...) -> Int {
return numbers.reduce(0, combine: +)
}
请注意 numbers
参数(可变参数)如何合并为 [Int]
类型的单个 Array
。通常情况下,T...
类型的可变参数可以作为 [T]
访问。
现在可以像这样调用此函数:
let a = sum(1, 2) // a == 3
let b = sum(3, 4, 5, 6, 7) // b == 25
Swift 中的可变参数不必位于参数列表的末尾,但每个函数签名中只能有一个参数。
有时,在参数数量上设置最小尺寸很方便。例如,采用没有值的 sum
真的没有意义。一种简单的方法是强制执行此操作,方法是添加一些非变量的必需参数,然后再添加 variadic 参数。为了确保只能使用至少两个参数调用 sum
,我们可以编写
func sum(_ n1: Int, _ n2: Int, _ numbers: Int...) -> Int {
return numbers.reduce(n1 + n2, combine: +)
}
sum(1, 2) // ok
sum(3, 4, 5, 6, 7) // ok
sum(1) // not ok
sum() // not ok