将可变长度参数传递给函数Swift

时间:2014-06-03 15:02:02

标签: swift

我正在阅读用他们的新语言发布的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...

的方法

有谁知道我怎么能做类似的事情?

2 个答案:

答案 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

时,您正在解析数组