2016-02-12 99 views
3

新的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

回答

5

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

1

如前所述dfri,一個可變參數的類型爲數組,所以它實際上應該是mathFunction: [Int] -> Int, numbers: Int ...)

編輯:

這需要改變的addNumbers和multiplyNumbers的簽名採取[Int],因爲reaso的以上。

+0

中傳遞數組,這是行不通的。您還需要更改其他兩個功能的參數。 –

+0

嗯,是有道理的。 – kevchoi

相關問題