Variadic参数 - 编译器错误无法将类型'[Int]'的值转换为期望的参数类型'Int'

问题描述:

新的swift。不知道为什么编译器是给错误的代码如下:Variadic参数 - 编译器错误无法将类型'[Int]'的值转换为期望的参数类型'Int'

​​

错误:

error: cannot convert value of type '[Int]' to expected argument type 'Int' return mathFunction(numbers)

+4

'mathFunction:(智力...)'...预计_single_'Int'类型的可变参数的参数,而'numbers'是'Int'数组;例如,以下签名是有效的(但可能并非如你所愿)'func mathOperation(mathFunction:([Int]) - > Int,numbers:Int ...) - > Int {...}'。这可能是意料之外的,因为'mathOperation'中的'numbers'是一个可变参数,但是这只在调用函数时才起作用:variadic参数并不是真正的类型,因此一旦'numbers'输入“函数的一个实例” ,它是一个数组。 – dfri

+0

Swift可变参数不像在Java中那样容易互换,您不能简单地在 – luk2302

Swift可变参数并不是那么容易操作。我会将参数类型更改为数组。这里有一个工作的解决办法:

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

func multiplyNumbers(numbers: [Int]) -> Int { 
    var total : Int = numbers [0] 
    for (index,number) in numbers.enumerate() { 
     if index == 0 { 
      continue 
     } 
     total *= number 
    } 
    return total 
} 

func mathOperation(mathFunction: [Int] -> Int, numbers: Int ...) -> Int { 
    return mathFunction(numbers) 
} 

print(mathOperation(multiplyNumbers,numbers: 3,24)) 

这将打印出72

如前所述dfri,一个可变参数的类型为数组,所以它实际上应该是mathFunction: [Int] -> Int, numbers: Int ...)

编辑:

这需要改变的addNumbers和multiplyNumbers的签名采取[Int],因为reaso的以上。

+0

中传递数组,这是行不通的。您还需要更改其他两个功能的参数。 –

+0

嗯,是有道理的。 – kevchoi