Swift EventHub

Swift 中使用由泛型类型定义的 callbacks/listeners 实现的简单类型安全的 EventHub。

示例

回调 (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))

用法

  1. 导入库
import SwiftEventHub
  1. DispatchQueue 上初始化 EventHub 类。 将 EventHub 添加到全局作用域(例如共享实例),用于跨事件/监听器,或在内部作用域中使用它。
let hub = EventHub(queue: .global())
  1. 通过使事件符合 Event 协议来定义事件
struct MyEvent: Event {}
  1. 通过回调或监听器订阅事件(参见上面的示例)
hub.subscribe { (event: MyEvent) in 
    // Do something with the event
}
  1. 通过调用 .trigger(event: Event) 方法触发事件
hub.trigger(MyEvent())
  1. 触发的事件将分发到附加到 hub 的所有监听器,这些监听器监听该特定事件。

  2. 要取消订阅,可以使用从 .subscribe 方法返回的 UUID

let subscription = hub.subscribe { // ... }
hub.unsubscribe(subscription)

要求

Swift 4.1

安装

使用 CocoaPods

pod 'SwiftEventHub'