尝试为符合两种不同协议的类添加辅助函数
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的参考链接