如何在swift中扩展两个协议的交集

  • 本文关键字:两个 协议 swift 扩展 swift
  • 更新时间 :
  • 英文 :


尝试为符合两种不同协议的类添加辅助函数

protocol A {
func doA()
}
protocol B {
func doB()
}
typealias AnB = A & B
extension AnB {   // causes error can not extend non-nominal type
func doAnB()
{
doA()
doB()
}
}

还有别的办法吗?

遗憾的是,您不能扩展复合协议类型别名。

extension A where Self: B {
func doAnB() {
doA()
doB()
}
}

请试试这个方法。

protocol A {
func doA()
}
protocol B {
func doB()
}
protocol C: A, B{
func doC()
}

你可以通过组合a, b两个协议来创建一个新的协议C,并在你想要使用它的类中声明C协议的变量

在你想运行doC()函数的地方实现main类的扩展,如下所示。

class ViewController{
let delegate: C?
}
extension ViewController: C {   // try this new one.
func doC()
{
self.delegate?.doA()
self.delegate?.doB()
}
func doA(){}
func doB(){}
}

这里是Swift 5.6中Protocol combination的参考链接

最新更新