Envoy 是 NSNotificationCenter
的线程安全协议替代品。在 AirHelp,我们相信在大多数情况下使用 NSNotificationCenter
是一种反模式(关于这个主题已经说了很多话了)。
此外,在 Swift 的情况下,NSNotificationCenter
API 感觉像是古老的,使用基于字符串的事件注册、选择器和需要 @objc
方法。
因此,我们决定构建一个替代品,它提供与 NSNotificationCenter
类似的解决方案,但没有任何耦合,并且具有一个更加优雅的 Swift API。
因此,Envoy 应运而生。
为了为特定对象和协议注册通知,您需要调用
Envoy.register(AuthenticationObserver.self, observer: observer, object: poster)
要发布通知,您需要调用
Envoy.notify(AuthenticationObserver.self, object: poster) { observer in
observer.didAuthenticate()
}
就这样!Envoy 将根据传入的协议和您希望观察的对象,负责路由到适当的对象。此外,它还自动处理弱引用,不需要在 deinit 之上取消注册。
Envoy 也可通过 Swift 包管理器获取。您可以通过定义一个依赖项来添加它
.Package(url: "https://github.com/airhelp/envoy.git", majorVersion: 1),
Envoy 是 AirHelp 的开源项目,由以下人员设计和实现
Envoy 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。