我正在阅读用他们的新语言发布的iBook苹果。其中一个实验建议编写一个函数来查找一组数字的平均值。
这是我一直在尝试的,但没有得到游乐场的反馈。
func sumOf(numbers: Int...) -> Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
}
func calculateAverage(numbers: Int...) -> Int {
var sum = sumOf(numbers)
return sum / numbers.count
}
calculateAverage(33, 44, 66, 132)
在var sum = sumOf(numbers)
行上,我收到错误:
Could not find an overload for supplied arguments
我很难理解为什么我无法将类型为numbers
的{{1}}参数传递给一个采用Int...
有谁知道我怎么能做类似的事情?
答案 0 :(得分:5)
numbers: Int...
中的sumOf
参数称为可变参数。这意味着您可以传入可变数量的该类型的参数,并且您传入的所有内容都将转换为该类型的数组,供您在函数中使用。
因此,numbers
内的calculateAverage
参数是一个数组,而不是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)
更改
func sumOf(numbers: Int...)
到
func sumOf(numbers: Int[])
当您期望单个Int
时,您正在解析数组