Swift EventHub
Swift 语言实现的_eventHub 简单实现。支持回调和监听器。
示例
回调
struct CounterEvent: Event {
let currentCount: Int
}
let eventHub = EventHub(queue: .global())
eventHub.subscribe { (event: CounterEvent)
print(event.currentCount) // => 5
}
eventHub.trigger(CounterEvent(currentCount: 5))
监听器
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))
使用方法
- 在
DispatchQueue
上初始化 EventHub 类。将EventHub
添加到全局作用域(例如共享实例),用于跨事件/监听器,或在内部作用域中使用。
let hub = EventHub(queue: .global())
- 通过使它们符合
Event
协议来定义事件
struct MyEvent: Event {}
- 通过回调或监听器(见上面的示例)订阅事件
hub.subscribe { (event: MyEvent) in
// Do something with the event
}
- 通过调用方法
.trigger(event: Event)
触发事件
hub.trigger(MyEvent())
-
触发的事件将被分发到与中心附加的所有监听器,并监听该特定事件。
-
要退订,可以使用
.subscribe
方法返回的UUID。
let subscription = hub.subscribe { // ... }
hub.unsubscribe(subscription)
需求
Swift 4.1
安装
使用CocoaPods
pod 'SwiftEventHub'