为什么下面的代码无法编译(因为错误:在传入Int ...时找不到接受提供的参数的#con; _conversion'的重载)?
func sumOfNumbers(numbers: Int...) -> Int{
var sum = 0;
for number in numbers{
sum += number
}
return sum
}
func averageOfInts(numbers: Int...) -> Int{
var sumNums: Int = 0
sumNums = sumOfNumbers(numbers)
var count = numbers.count
return sumOfNumbers(numbers)/numbers.count
}
但是当使用Int []代替Int ...时,它会按预期编译和工作。
答案 0 :(得分:3)
当参数的类型为Int...
时,所有后续的args都会为你聚集到数组中,而Int[]
要求你传递只有一个参数,一个数组Ints:
func sumOfIntsSplat(numbers:Int...) -> Int {
var sum = 0;
for number in numbers{
sum += number
}
return sum
}
func sumOfIntsArray(numbers: Int[]) -> Int{
var sum = 0;
for number in numbers{
sum += number
}
return sum
}
sumOfIntsSplat(1,2,3,4,5)
sumOfIntsArray([1,2,3,4,5])
Int...
语法称为Variadic parameter in the swift documentation
(除此之外:我借用了coffeescript的名字" splat"我第一次遇到这种语法)
答案 1 :(得分:0)
Int...
表示Int
类型的一个或多个参数。
如sum(3,4,5,6)
虽然Int[]
表示包含Ints的单个参数。 (像数组一样)
像sum([3,4,5,6])