自我为ClassA或ClassB的协议扩展

时间:2019-05-27 14:30:38

标签: swift protocols

在符合标准的类为ClassA OR ClassB的情况下,我有一个协议要为其提供默认功能。是否可以在协议扩展where子句中使用||?我已经尝试了以下方法,但是没有用:

extension Protocol where Self: ClassA || Self: ClassB {
    func method() {
        // implementation if conforming class is ClassA OR ClassB
    }
}

2 个答案:

答案 0 :(得分:2)

否,您不能在协议扩展的||子句中使用where(或等效的东西)。

如果扩展方法需要ClassAClassB中都存在的某些功能,则可以在协议中定义这两个类都符合的功能,并将扩展限制为该协议。

答案 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
}

或创建一个通用协议,假设ClassAClassB符合此协议。

protocol CommonProtocol {}

class ClassA: Protocol, CommonProtocol {}

class ClassB: Protocol, CommonProtocol {}

extension Protocol where Self: CommonProtocol {
    func method() {
       // your stuff
    }
}