swift 我如何检查协议A的扩展,即“self”是否遵循协议B?

8yoxcaq7  于 2023-06-21  发布在  Swift
关注(0)|答案(1)|浏览(85)

设计模式看起来像这样:

protocol Base {

}

protocol A: Base {

}

protocol B: Base {

}

extension A {
    func someFunc() {
        if ((self as Any) is any B.Type) { // <- apparently this compiles, but doesn't return True as it's designed in extension A, not the real class that both follows A and B
            print("So it also follows protocol B")
        }
    }
}

class finalClass: A, B {
    func anotherFunc() {
        someFunc()
    }
}

我想检查扩展A的定义,调用该函数的类是否也遵循协议B?
我发布了使用as?可以工作,但是这里有特定的模式或最佳实践吗?

hfwmuf9z

hfwmuf9z1#

你需要定义“不起作用”。其他人看到它的工作和不理解。

extension A {
  func someFunc() -> String { "A" }
}

extension A where Self: B {
  func someFunc() -> String { "B" }
}

final class AClass: A { }
final class ABClass: A & B { }

AClass().someFunc() // "A"
ABClass().someFunc() // "B"

相关问题