Create an interface to receive delegate callback and dispatch to muitpule observer instances.
For example, we create an delegate called MyClassDelegate
.
protocol MyClassDelegate {
func myClassDosomething()
}
First, create a dispatcher with your delegate type.
class MyDispatcher {
static let sharedInstance = MyDispatcher()
private let dispatcher = DelegateDispatcher<MyClassDelegate>()
}
Second, pipe the original delegate into your dispatcher.
extension MyDispatcher: MyClassDelegate {
func myClassDosomething() {
for obj in dispatcher.getObservers() {
obj.myClassDosomething()
}
}
}
Then, add your class to dispatcher observers.
class MyClass1: MyClassDelegate {
func registerObserver() {
MyDispatcher.sharedInstance.dispatcher.addWeakObserver(self)
}
func myClassDosomething() {
// ...
}
}
class MyClass2: MyClassDelegate {
func registerObserver() {
MyDispatcher.sharedInstance.dispatcher.addWeakObserver(self)
}
func myClassDosomething() {
// ...
}
}