2015-04-06 43 views
1

我正在學習Swift。下面是我的代碼:具有相關值的Swift枚舉,在調用「缺少參數標籤」數組「

enum MyTest 
{ 
    case Point(Int, Int) 
    case What(String) 
    case GiveMeFunc((array: Int...) -> Int) 
} 

var p1 = MyTest.Point(2, 2) 
var p2 = MyTest.Point(3, 3) 

var s1 = MyTest.What("Haha...") 
var s2 = MyTest.What("Heihei...") 

var f1 = MyTest.GiveMeFunc({(array: Int...) -> Int in return 8}) 
var f2 = MyTest.GiveMeFunc({(array: Int...) -> Int in return 9}) 

switch p1 { 
    case .What(let string): 
     println(string) 
    case .GiveMeFunc(let f): 
     println(f(1, 2, 4, 3)) 
    case .Point(let a, let b): 
     println("a: \(a) b: \(b)") 
} 

當我運行它,我得到了

missing argument label 'array' in call. 

這個錯誤來自:

println(f(1, 2, 4, 3))` 

如何修正這個錯誤?

+0

@MaximShoustin看的情況下 – Arbitur

回答

3

通過插入array:標籤:

case .GiveMeFunc(let f): 
    println(f(array: 1, 2, 4, 3)) 

,因爲函數的定義需要它:

case GiveMeFunc((array: Int...) -> Int) 

另外,如果你重新定義GiveMeFunc到沒有命名的參數,你不會有以供應它:

case GiveMeFunc((Int...) -> Int) 
+0

哦,我不知道'F(ARR ay:1,2,4,3)''1,2,4,3'被認爲是一個數組。我試過f(數組:[1,2,4,3]),但它不起作用。有趣。謝謝! –

+1

'Int ...'是所謂的可變參數。對於調用者來說,它看起來像提供了多個單獨的參數,但在函數本身中,它們都是以數組的形式呈現的。 –

2

正如你可以看到在t他的錯誤消息:missing argument label 'array' in call

如果你看看你的閉合GiveMeFunc((array: Int...) -> Int)它需要一個叫做array

所以該錯誤信息是說,你缺少的參數名稱

所以參數做:println(f(array: 1, 2, 4, 3))它的工作原理

或改變封蓋GiveMeFunc((Int...) -> Int)