在符合标准的类为ClassA
OR ClassB
的情况下,我有一个协议要为其提供默认功能。是否可以在协议扩展where子句中使用||
?我已经尝试了以下方法,但是没有用:
extension Protocol where Self: ClassA || Self: ClassB {
func method() {
// implementation if conforming class is ClassA OR ClassB
}
}
答案 0 :(得分:2)
否,您不能在协议扩展的||
子句中使用where
(或等效的东西)。
如果扩展方法需要ClassA
和ClassB
中都存在的某些功能,则可以在协议中定义这两个类都符合的功能,并将扩展限制为该协议。
答案 1 :(得分:0)
目前根本不可能。一种解决方案是创建两个不同的扩展。
extension Protocol where Self: ClassA {
func method() {
commonMethod()
}
}
extension Protocol where Self: ClassB {
func method() {
commonMethod()
}
}
private func commonMethod() {
// do here your stuff
}
或创建一个通用协议,假设ClassA
和ClassB
符合此协议。
protocol CommonProtocol {}
class ClassA: Protocol, CommonProtocol {}
class ClassB: Protocol, CommonProtocol {}
extension Protocol where Self: CommonProtocol {
func method() {
// your stuff
}
}