我无法理解为什么我不能将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)
^~~~~~~~~~~~~~
感谢您的帮助!
答案 0 :(得分:17)
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)
}
答案 1 :(得分:0)
我可以通过将Int...
替换为Int[]
中的sumOf()
来使其发挥作用。
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时,它将参数转换为名为numbers的数组。然后尝试将该数组传递给sumOf,但是你已经写了它来获取可变数量的Ints而不是Ints数组。