具有关联值的Swift枚举在调用中获得“缺少参数标签'array'”

具有关联值的Swift枚举在调用中获得“缺少参数标签'array'”,swift,enums,Swift,Enums,我在学斯威夫特。下面是我的代码: 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...")

我在学斯威夫特。下面是我的代码:

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))` 
如何修复错误?

通过插入数组:标签:

由于函数的定义需要它:

case GiveMeFunc((array: Int...) -> Int)
或者,如果将GiveMeFunc重新定义为没有命名参数,则不必提供它:

case GiveMeFunc((Int...) -> Int)
通过插入数组:标签:

由于函数的定义需要它:

case GiveMeFunc((array: Int...) -> Int)
或者,如果将GiveMeFunc重新定义为没有命名参数,则不必提供它:

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

正如您在错误消息中所看到的:调用中缺少参数标签“array”

如果你看你的闭包,数组:Int…->Int它接受一个名为array的参数

因此,错误消息表示您缺少参数名称

因此,通过这样做:printlnfarray:1,2,4,3它是有效的


或者将闭包更改为GiveMeFuncInt…->Int

如错误消息中所示:调用中缺少参数标签“array”

如果你看你的闭包,数组:Int…->Int它接受一个名为array的参数

因此,错误消息表示您缺少参数名称

因此,通过这样做:printlnfarray:1,2,4,3它是有效的


或者将闭包更改为GiveMeFuncInt…->Int

哦,我不知道farray:1,2,4,31,2,4,3被认为是一个数组。我试过farray:[1,2,4,3],但不起作用。有趣的非常感谢。内。。。就是所谓的可变参数。对调用者来说,它看起来像是提供了多个独立的参数,但在函数本身中,这些参数都是以数组的形式呈现的。我试过farray:[1,2,4,3],但不起作用。有趣的非常感谢。内。。。就是所谓的可变参数。对于调用者来说,它看起来像是提供了多个单独的参数,但在函数本身内部,这些参数都以数组的形式呈现。@MaximShoustin在case@MaximShoustin看看这个箱子