swift-event-broadcasting is a library for creating and observing events. It is
similar in function to the events module in Node.js.
Here, an EventBroadcaster is the analogue of Node.js EventEmitter, and an
event subscriber is the analogue of an event handler.
- "Set it and forget it" event subscription
- Support for broadcasting multiple event types
- Hassle-free unsubscribe mechanism for
Hashablesubscribers - Fully customizable event queueing and dispatching
Extend EventBroadcaster or implement the EventBroadcasting protocol:
import Events
class GPSService: EventBroadcaster {
}
class GPSServiceAlternate: EventBroadcasting {
private let broadcaster: EventBroadcaster = EventBroadcaster()
func subscribe(...) { broadcaster.subscribe(...) }
...
func broadcast(...) { broadcaster.broadcast(...) }
}Subscribe with an event type, the event handler as a closure, and
optionally an associated AnyHashable.
Without an AnyHashable, a SubscriberId will be returned. If you intend on
unsubscribing (removing) the event handler, then you should store the
subscriber id to call unsubscribe() later.
let gpsService = GPSService()
// Subscribe
let subscriberId = gpsService.subscribe(to: "locationUpdate") {
print("location updated")
}
// Broadcast
gpsService.broadcast(Event(eventType: "locationUpdate"))
// prints "location updated"
// Unsubscribe
gpsService.unsubscribe(id: subscriberId, from: "locationUpdate")With an AnyHashable, no subscriber id will be returned. To unsubscribe, pass
the same AnyHashable.
let gpsService = GPSService()
let someHashable: AnyHashable = ...
// Subscribe
gpsService.subscribe(someHashable, to: "locationUpdate") {
print("location updated")
}
// Broadcast
gpsService.broadcast(Event(eventType: "locationUpdate"))
// prints "location updated"
// Unsubscribe
gpsService.unsubscribe(subscriber: someHashable, from: "locationUpdate")