如何使协议只符合要求类?
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 A
的 UIViewController
中符合 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() {
}
}
我正在尝试实现对协议的类型约束。在我当前的项目中,我有一个以下基本控制器。我也检查了
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 A
的 UIViewController
中符合 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() {
}
}