如何创建一个快速的通用可变参数函数?

时间:2017-12-12 21:41:38

标签: swift generics variadic-functions

这是我的代码

AA

这里我们有2个BaseClass BBAA的子类。

CCP 符合协议BBP 不符合协议AA

如何使用该功能仅接受多个参数CCBB但拒绝test(AA.self, BB.self)

我试过这个:

{{1}}

这给了我编译时错误。有什么方法可以实现上述行为吗?

1 个答案:

答案 0 :(得分:2)

一种方法可能是为typealiasBaseClass的配对声明P

protocol P {}
class BaseClass {}
class AA: BaseClass, P {}
class BB: BaseClass {}
class CC: BaseClass, P {}

typealias BaseP = BaseClass & P
func test1(value: BaseP.Type...) {
    for t in value {
        print(t)
    }
}

test1(value: AA.self, CC.self) // prints "AA" and "CC"

// fails: "cannot convert value of type 'BB.Type' to expected argument type 'BaseP.Type' (aka '(BaseClass & P).Type')"
//test1(value: AA.self, BB.self)