Passing lists from one function to another in Swift

醉酒当歌 提交于 2019-11-26 22:34:08

The numbers: Int... parameter in sumOf is called a variadic parameter. That means you can pass in a variable number of that type of parameter, and everything you pass in is converted to an array of that type for you to use within the function.

Because of that, the numbers parameter inside average is an array, not a group of parameters like sumOf is expecting.

You might want to overload sumOf to accept either one, like this, so your averaging function can call the appropriate version:

func sumOf(numbers: [Int]) -> Int {
    var sum = 0
    for number in numbers {
        sum += number
    }
    return sum
}
func sumOf(numbers: Int...) -> Int {
    return sumOf(numbers)
}

I was able to get it to work by replacing Int... with Int[] in 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)

Your problem is Int... is a variable amount of Ints while Int[] is an array of Int. When sumOf is called it turns the parameters into an Array called numbers. You then try to pass that Array to sumOf, but you had written it to take a variable number of Ints instead of an Array of Ints.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!