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
Hashable
subscribers - 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")