使用泛型和协议继承。
例如,我们有两个不同的类A和B,它们都是基于父类C,我们想为它们添加一个同样的协议扩展。我们可以这样做:
首先,我们定义一个协议,即我们想要实现的扩展:
protocol MyProtocol {
func myFunction()
}
然后,我们可以使用协议继承来实现我们的扩展:
protocol MyProtocolA: MyProtocol {}
protocol MyProtocolB: MyProtocol {}
现在,我们可以在类A和类B中使用这个协议扩展:
class A: C, MyProtocolA {
// ...
}
class B: C, MyProtocolB {
// ...
}
extension MyProtocol where Self: C {
func myFunction() {
// ...
}
}
这里,我们使用了泛型where子句,因为我们只希望将MyProtocol扩展应用于基类C的子类,而不是应用于任何类。
现在,类A和类B都可以使用相同的扩展了,而且我们还可以保证这个扩展只适用于基类C的子类。