具有相关值的Swift枚举,得到了缺少参数标签' array'在电话"

时间:2015-04-06 16:42:47

标签: 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...")

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))` 

如何解决错误?

2 个答案:

答案 0 :(得分:3)

插入array:标签:

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

因为函数的定义需要它:

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

或者,如果您重新定义GiveMeFunc没有命名参数,则您不必提供它:

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

答案 1 :(得分:2)

正如您在错误消息中看到的那样:missing argument label 'array' in call

如果查看结束GiveMeFunc((array: Int...) -> Int),则需要一个名为array

的参数

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

通过这样做:println(f(array: 1, 2, 4, 3))它可以正常工作

或将闭包更改为GiveMeFunc((Int...) -> Int)