如何使协议只符合要求类?

How to make protocol conformed by only required classes?

我正在尝试实现对协议的类型约束。在我当前的项目中,我有一个以下基本控制器。我也检查了 ,但我不明白为什么它不起作用。

class BaseViewController: UIViewController {
}

我根据自己的要求声明了两个协议。

protocol A: AnyObject {
    func execute()
}

extension A {
    func execute() {
        print("Execute")
    }
}

protocol B {
    func confirm()
}

extension B where Self: BaseViewController & A {
    func confirm() {
        
    }
}

我想要实现的是防止所有 类 不符合协议 A 并且 BaseViewController 也不能符合协议 B。

然而,当我尝试在另一个不符合 protocol AUIViewController 中符合 protocol B 时,没有错误。

class AnotherVC: UIViewController {
}

extension AnotherVC: B {
    func confirm() {
    }
}

如果其他视图控制器不符合 protocol A 并继承自 BaseViewController

,我如何限制它们符合 protocol B

我不确定下面的代码是否是您需要的,如果那是您要找的,请告诉我,否则我很乐意删除我的答案。

protocol A:BaseViewController  {
    func execute()
}

protocol B:A {
    func confirm()
}

class BaseViewController: UIViewController {
    
}

class AnotherVC: B {
   
}

在上面的代码中,编译器会报错-:

'A' requires that 'AnotherVC' inherit from ‘BaseViewController'

一旦你从BaseViewController继承AnotherVC,它会给出另一个错误提示-:

Type 'AnotherVC' does not conform to protocol ‘A'

一旦您确认实施错误将得到解决-:

class AnotherVC:BaseViewController, B {
    func confirm() {
        
    }
    
    func execute() {
        
    }
    
}