使用空可变参数调用函数

时间:2015-12-14 16:29:57

标签: swift

我有一个带有一个可变参数(tuple)的函数,如下所示:

func conditions<T>(conditions: ([String : T], LogicalOperator)...) -> [AnyObject]?

有没有办法在没有那个参数的情况下调用它?以某种方式传递一组空的可变参数?我只是希望能够在没有任何条件的情况下支持一个选项。

2 个答案:

答案 0 :(得分:1)

您可以使用function overloading完成所需内容。

您可以重载函数定义以不接受任何参数...

  • func conditions() -> [AnyObject]?

或者,您可以重载它以接受您的类型数组...

  • func conditions<T>(conditions: [([String : T], LogicalOperator)]) -> [AnyObject]?

或者你可以让它接受可选值并传递nil。

  • func conditions<T>(conditions: ([String : T], LogicalOperator)?...) -> [AnyObject]?

答案 1 :(得分:1)

您可以这样做,但不能作为通用功能。为什么?因为它不能推断出类型,所以编译器不知道T是什么,即使你的元组是可选的。因此理论上的下面的代码可以工作,但执行将会失败:

struct Test<T> {
    func conditions<T>(conditions: ([String : T], String)?...) -> [AnyObject]? {
        return nil
    }
}

var t = Test<Int>()
t.conditions() // Error infering type

然而,这个确实有效(如果它确实满足您的需求):

struct Test<T> {
    typealias testAlias = ([String : T], String)
    func conditions(conditions: testAlias...) -> [AnyObject]? {
        return nil
    }
}

var t = Test<Int>()
t.conditions()