一尘不染

在Swift中将列表从一个函数传递到另一个函数

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)
          ^~~~~~~~~~~~~~

谢谢你的帮助!


阅读 223

收藏
2020-07-07

共1个答案

一尘不染

中的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)
}
2020-07-07