新的swift。不知道爲什麼編譯器是給錯誤的代碼如下:Variadic參數 - 編譯器錯誤無法將類型'[Int]'的值轉換爲期望的參數類型'Int'
錯誤:
error: cannot convert value of type '[Int]' to expected argument type 'Int' return mathFunction(numbers)
新的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