我有一个带有一个可变参数(tuple)的函数,如下所示:
func conditions<T>(conditions: ([String : T], LogicalOperator)...) -> [AnyObject]?
有没有办法在没有那个参数的情况下调用它?以某种方式传递一组空的可变参数?我只是希望能够在没有任何条件的情况下支持一个选项。
答案 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()