EventRouter 0.1.4

EventRouter 0.1.4

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2016年5月
SPM支持SPM

Brendan Conron 维护。



EventRouter

事件是iOS生态系统的一个核心部分,在CocoaPods中进行搜索可以得到大量结果。更不用说,Apple默认提供了NSNotificationNSNotificationCenter。那么,EventRouter与它们相比有什么不同/更好之处呢?

小巧轻便

EventRouter的文件大小仅为20KB左右,使其变得非常轻量。

文档完善

每个函数、类和结构都进行了详细的文档记录(即将在Cocoadocs上提供)。

经过良好测试

当前的代码覆盖率为99%。

无依赖

EventRouter没有其他依赖,使其成为一个无偏见的框架。想要使用EventRouterNSNotificationCenter?没问题!注意:EventRouter现在有一个支持ReactiveCocoa的子规范,完全是可选的。以下是使用方法。

使用方法

创建路由器

在使用EventRouter时,有两种选择。

使用单例实例(对全局消息很有用)

    EventRouter.router.addObserver(self, forEvent: "some-event")

或创建一个独立的实例(对包含一系列类的消息,如视图控制器及其所有组件很有用)

    let router = EventRouter()
    router.addObserver(self, forEvent: "some-event")

接收事件

NSNotificationCenter不同,想要接收消息的类必须遵守EventRouterObserverEventRouterObserver只有一个方法:routedEventOccurred:onRouter:withUserInfo

    class MyViewController: UIViewController {

    }

    extension MyViewController: EventRouterObserver {
      func routedEventOccurred(event: String, onRouter router: EventBroadcaster, withUserInfo userInfo: [NSObject: AnyObject]) {
        if event == "my-awesome-event" {
          // do something
        }
      }
    }

添加和移除观察者

添加观察者非常简单,只需

    let router = EventRouter()
    router.addObserver(self, forEvent: "my-awesome-event")

稍后来移除它

  router.removeObserver(self, forEvent: 'my-awesome-event')
  // or remove from all events
  router.removeObserver(self)

因为路由器持有观察者的弱引用(EventRouterObserver是一个类限制的协议),如果你的观察者被清理,它们将从观察者列表中移除,事件将不再发送。

ReactiveCocoa

如果您是ReactiveCocoa的粉丝,您可以为EventRouter/ReactiveCocoa子规范安装。与EventRouter不同,RACRouter不使用观察者。相反,它通过router.signalrouter.producer广播事件。

signalproducer在每次事件中都会发送一个元组,格式为《String, EventBroadcaster, [NSObject: AnyObject]?》。

let router = RACRouter()
router.signal.filter { $0.0 == "my-custom-event}.map { $0.2 }.ignoreNil()

未来特性

  1. 能够抑制和解除抑制观察者。

安装

EventRouter可通过CocoaPods获取。要安装,只需将以下行添加到您的Podfile中

pod "EventRouter"

作者

Brendan Conron,[email protected]

许可证

EventRouter在MIT许可证下可用。有关更多信息,请参阅LICENSE文件。