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

Max*_*ers 17 variadic-functions 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)
}
Run Code Online (Sandbox Code Playgroud)

这给了我以下错误:

Playground execution failed: error: <REPL>:138:19: error: could not find an overload for '__conversion' that accepts the supplied arguments

var sum = sumOf(numbers)
          ^~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

Nat*_*ook 18

该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)
}
Run Code Online (Sandbox Code Playgroud)