imbue11235/eventhub
Simple typesafe EventHub in Swift using callbacks/listeners defined by generic types.
Examples
Callback
struct CounterEvent: Event {
let currentCount: Int
}
let eventHub = EventHub(queue: .global())
eventHub.subscribe { (event: CounterEvent)
print(event.currentCount) // => 5
}
eventHub.trigger(CounterEvent(currentCount: 5))Listener
struct SomeErrorEvent: Event {
let message: String
let code: Int
}
class NotifyAdminListener: Listener<SomeErrorEvent> {
override func handle(event: SomeErrorEvent) {
print("Oh no! We got error \(error.code) with the message '\(error.message)'")
}
}
let eventHub = EventHub(queue: .global())
eventHub.subscribe(NotifyAdminListener())
eventHub.trigger(SomeErrorEvent(message: "Fatal and dangerous error", code: 500))Usage
- Import the library
import SwiftEventHub- Initialize the EventHub class on a
DispatchQueue. Add theEventHubto a global scope (e.g. shared instance), for cross-events/listeners, or use it in an internal scope
let hub = EventHub(queue: .global())- Define events by making them comply to the
Eventprotocol
struct MyEvent: Event {}- Subscribe to the events either by callback or listener (see examples above)
hub.subscribe { (event: MyEvent) in
// Do something with the event
}- Trigger events by calling the method
.trigger(event: Event)
hub.trigger(MyEvent())- The events triggered are distributed to all listeners attached to the hub, listening for that specific event.
- To unsubscribe, the returned UUID from the
.subscribemethod, can be used
let subscription = hub.subscribe { // ... }
hub.unsubscribe(subscription)Requirements
Swift 4.1
Installation
With CocoaPods:
pod 'SwiftEventHub'Package Metadata
Repository: imbue11235/eventhub
Default branch: master
README: README.md