Variadic参数 - 编译器错误无法将类型'[Int]'的值转换为期望的参数类型'Int'
新的swift。不知道为什么编译器是给错误的代码如下:Variadic参数 - 编译器错误无法将类型'[Int]'的值转换为期望的参数类型'Int'
错误:
error: cannot convert value of type '[Int]' to expected argument type 'Int' return mathFunction(numbers)
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的以上。
中传递数组,这是行不通的。您还需要更改其他两个功能的参数。 –
嗯,是有道理的。 – kevchoi
'mathFunction:(智力...)'...预计_single_'Int'类型的可变参数的参数,而'numbers'是'Int'数组;例如,以下签名是有效的(但可能并非如你所愿)'func mathOperation(mathFunction:([Int]) - > Int,numbers:Int ...) - > Int {...}'。这可能是意料之外的,因为'mathOperation'中的'numbers'是一个可变参数,但是这只在调用函数时才起作用:variadic参数并不是真正的类型,因此一旦'numbers'输入“函数的一个实例” ,它是一个数组。 – dfri
Swift可变参数不像在Java中那样容易互换,您不能简单地在 – luk2302