在Swift中将列表从一个函数传递到另一个函数

我不明白为什么我不能从一个函数向另一个函数传递一个Int []:

func sumOf(numbers: Int...) -> Int { var sum = 0 for number in numbers { sum += number } return sum } func average(numbers:Int...) -> Double { var sum = sumOf(numbers) return Double(sum) / Double(numbers.count) } 

这给了我以下错误:

Playground execution failed: error: <REPL>:138:19: error: could not find an overload for '__conversion' that accepts the supplied arguments

 var sum = sumOf(numbers) ^~~~~~~~~~~~~~ 

谢谢你的帮助!

sumOfnumbers: Int...参数被称为可变参数 。 这意味着你可以传递一个可变数目的参数types,并且你传入的所有东西都被转换成一个这个types的数组,供你在函数中使用。

因此, average内的numbers参数是一个数组,而不是像sumOf所期望的一组参数。

你可能想要重载sumOf来接受任何一个,所以你的平均函数可以调用相应的版本:

 func sumOf(numbers: [Int]) -> Int { var sum = 0 for number in numbers { sum += number } return sum } func sumOf(numbers: Int...) -> Int { return sumOf(numbers) } 

我可以通过用sumOf() Int[]replaceInt...来使其工作。

 func sumOf(numbers: Int[]) -> Int { var sum = 0 for number in numbers { sum += number } return sum } func average(numbers: Int...) -> Double { var sum = sumOf(numbers) return Double(sum) / Double(numbers.count) } average(3,4,5) 

你的问题是Int...是一个可变数量的Ints,而Int[]是一个Int数组。 当sumOf被调用时,它将参数变成一个名为数字的数组。 然后,您尝试将该数组传递给sumOf,但是您已经将其写入了可变数目的Ints,而不是一组Ints。