我不太明白为什么我不能将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) ^~~~~~~~~~~~~~
谢谢你的帮助!
中的numbers: Int...参数sumOf称为 可变参数 。这意味着您可以传入该参数类型的可变数量,并且传入的所有内容都将转换为该类型的数组,以供您在函数中使用。
numbers: Int...
sumOf
因此,numbers内部的参数average是一个数组,而不是sumOf所期望的一组参数。
numbers
average
您可能想要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) }