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