在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) ^~~~~~~~~~~~~~
谢谢你的帮助!
sumOf
的numbers: 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。