这是我的代码
AA
这里我们有2个BaseClass BB
和AA
的子类。
CC
和P
符合协议BB
。 P
不符合协议AA
。
如何使用该功能仅接受多个参数CC
和BB
但拒绝test(AA.self, BB.self)
?
我试过这个:
{{1}}
这给了我编译时错误。有什么方法可以实现上述行为吗?
答案 0 :(得分:2)
一种方法可能是为typealias
和BaseClass
的配对声明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)