Swift 中使用由泛型类型定义的 callbacks/listeners 实现的简单类型安全的 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))
import SwiftEventHub
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())
触发的事件将分发到附加到 hub 的所有监听器,这些监听器监听该特定事件。
要取消订阅,可以使用从 .subscribe
方法返回的 UUID
let subscription = hub.subscribe { // ... }
hub.unsubscribe(subscription)
Swift 4.1
使用 CocoaPods
pod 'SwiftEventHub'