jeudi 24 mars 2016

Want to avoid copy-pasting method names for a Swift 2 delegate dispatcher

I’m trying to implement a dispatcher to notify multiple targets for a delegate pattern protocol.

What’s a better way of doing the following pattern, without copy-pasting for every method name? Reflection, aspect-oriented programming, meta-programming all come to mind:

public class AirBatteryClientDelegateDispatcher: AirBatteryClientDelegate {
    private var targets = [AirBatteryClientDelegate]()

    public func clientDidStartScan(client: AirBatteryClient) {
        for target in targets {
            target.clientDidStartScan?(client)
        }
    }

    . . .
}

For reference, I’m using the following protocol with a dozen more similar methods:

@objc public protocol AirBatteryClientDelegate: class {
    optional func clientDidStartScan(client: AirBatteryClient)
    optional func clientDidStopScan(client: AirBatteryClient)
    optional func clientDidUpdateState(client: AirBatteryClient)
    . . .
}





Aucun commentaire:

Enregistrer un commentaire