Pasar listas de una función a otra en Swift

No puedo entender por qué no puedo pasar un Int [] de una función a otra:

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) } 

Esto me da el siguiente error:

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

 var sum = sumOf(numbers) ^~~~~~~~~~~~~~ 

¡Gracias por tu ayuda!

Los numbers: Int... parámetro numbers: Int... en sumOf se llama parámetro variadic . Eso significa que puede pasar un número variable de ese tipo de parámetro, y todo lo que pase se convierte en una matriz de ese tipo para que pueda usar dentro de la función.

Por eso, el parámetro de numbers dentro del average es una matriz, no un grupo de parámetros como sumOf está esperando.

Es posible que desee sobrecargar sumOf para aceptar uno, así, para que su función de promedio pueda llamar a la versión adecuada:

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

Pude hacerlo funcionar reemplazando Int... con Int[] en 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) 

Su problema es Int... es una cantidad variable de Ints mientras que Int[] es una matriz de Int . Cuando se llama a sumOf, convierte los parámetros en una matriz llamada números. A continuación, intenta pasar esa matriz a sumOf, pero la has escrito para tomar una cantidad variable de Ints en lugar de una matriz de Ints.