DWEventBus
描述
这是一个灵活的事件总线。
事件总线是对发布-订阅模式的一种实现。它是一种集中式事件处理机制,允许不同的组件之间进行彼此通信而又不需要相互依赖,达到一种解耦的目的。
借助DWEventBus,你可以轻松的实现这种模式。他是线程安全,随意指定消息发布或者订阅回调的执行队列、订阅方执行完毕的反馈、对联合事件的支持、强弱类型的支持以及链式语法都让你使用起来可以更加轻松愉快。
Description
这是一个灵活的事件总线。
事件总线是对发布-订阅模式的一种实现。它是一种集中式事件处理机制,允许不同的组件之间进行彼此通信而又不需要相互依赖,达到一种解耦的目的。
使用 DWEventBus,您可以轻松实现这种模式。它是线程安全的,您可以随意指定发布消息或订阅回调的执行队列、订阅方执行完毕的反馈、支持联合事件、支持强类型和弱类型以及链式语法,所有这些让使用更加方便和愉快。
功能
- 发布-订阅模式
- 联合事件
- 指定发布和订阅回调所在队列
- 订阅方执行完毕的反馈
Func
- 发布-订阅模式。
- 联合事件。
- 指定发布消息或订阅回调的执行队列。
- 订阅方执行后的反馈。
如何使用
首先,你应该将所需文件拖入工程中,或者你也可以使用Cocoapods进行集成。
pod 'DWEventBus', '~> 1.0.0'
建立最简单的订阅关系:
[[DWEventBus defaultEventBus] subscribe:^(DWEventMaker *maker) {
maker.EventName(@"Login").dw_Build();
} On:^(__kindof DWEvent *event, id subscribeTarget) {
NSLog(@"收到事件了");
}];
[[DWEventBus defaultEventBus] publish:^(DWEventMaker *maker) {
maker.EventName(@"Login").dw_Build();
}];
当然,你还可以指定消息发送的队列:
[[DWEventBus defaultEventBus] subscribe:^(DWEventMaker *maker) {
maker.EventName(@"Login").Queue(dispatch_get_global_queue(0, 0)).dw_Build();
} On:^(__kindof DWEvent *event ,id target) {
NSLog(@"Receive Login Event On Thread:%@",[NSThread currentThread]);
}];
如果需求是只有收到两个事件后才触发一个回调,你可以考虑使用联合事件:
DWEvent * e1 = [DWEvent new];
e1.eventName = @"Regist";
DWEvent * e2 = [DWEvent new];
e2.eventName = @"Login";
[[DWEventBus defaultEventBus] subscribe:^(DWEventMaker *maker) {
maker.UniteEvent(e1).UniteEvent(e2).EventName(@"Test").dw_Build();
} On:^(__kindof DWEvent *event ,id target) {
NSLog(@"事件接收完成,最后收到的是:%@",event.eventName);
}];
如果订阅方执行完成后想反馈给发布方,你也可以这样做:
[[DWEventBus defaultEventBus] subscribe:^(DWEventMaker *maker) {
maker.EventName(@"Login").dw_Build();
} On:^(__kindof DWEvent *event, id subscribeTarget) {
NSLog(@"已经收到Login事件");
///Do something
NSLog(@"已经完成相关操作,通知发布方我已完成");
[event setEventHandledBy:self];
}];
DWEvent * e = [DWEvent new];
e.eventName = @"Login";
e.eventHandledCallback = ^(id flag) {
NSLog(@"%@已经完成了Login事件的相关处理",flag);
};
[[DWEventBus defaultEventBus] publishEvent:e];
如果你想了解更多的用法,你可以查看这个示例以获取更详细的使用方法。
使用
首先,请将其拖入您的项目中,或者您可以使用Cocoapods进行集成。
pod 'DWEventBus', '~> 1.0.0'
建立最简单的订阅关系。
[[DWEventBus defaultEventBus] subscribe:^(DWEventMaker *maker) {
maker.EventName(@"Login").dw_Build();
} On:^(__kindof DWEvent *event, id subscribeTarget) {
NSLog(@"收到事件了");
}];
[[DWEventBus defaultEventBus] publish:^(DWEventMaker *maker) {
maker.EventName(@"Login").dw_Build();
}];
当然,您还可以指定消息发送的队列。
[[DWEventBus defaultEventBus] subscribe:^(DWEventMaker *maker) {
maker.EventName(@"Login").Queue(dispatch_get_global_queue(0, 0)).dw_Build();
} On:^(__kindof DWEvent *event ,id target) {
NSLog(@"Receive Login Event On Thread:%@",[NSThread currentThread]);
}];
如果需求是只有收到两个事件后才触发一个回调,请考虑使用联合事件。
DWEvent * e1 = [DWEvent new];
e1.eventName = @"Regist";
DWEvent * e2 = [DWEvent new];
e2.eventName = @"Login";
[[DWEventBus defaultEventBus] subscribe:^(DWEventMaker *maker) {
maker.UniteEvent(e1).UniteEvent(e2).EventName(@"Test").dw_Build();
} On:^(__kindof DWEvent *event ,id target) {
NSLog(@"事件接收完成,最后收到的是:%@",event.eventName);
}];
如果订阅方执行完成后想向发布方反馈,您也可以这样做。
[[DWEventBus defaultEventBus] subscribe:^(DWEventMaker *maker) {
maker.EventName(@"Login").dw_Build();
} On:^(__kindof DWEvent *event, id subscribeTarget) {
NSLog(@"已经收到Login事件");
///Do something
NSLog(@"已经完成相关操作,通知发布方我已完成");
[event setEventHandledBy:self];
}];
DWEvent * e = [DWEvent new];
e.eventName = @"Login";
e.eventHandledCallback = ^(id flag) {
NSLog(@"%@已经完成了Login事件的相关处理",flag);
};
[[DWEventBus defaultEventBus] publishEvent:e];
如果你想了解更多的用法,你可以查看这个示例以获取更详细的使用方法。
联系作者
您可以通过在我的GitHub上给我留言或者给我发送电子邮件 [email protected] 来给我提一些建议或者指出我的错误,我将不胜感激。
如果您喜欢这个小工具,请记得给我一个star,么么哒~
与我联系
您可以在我的GitHub上给我留言或发送电子邮件 [email protected],告诉我一些建议或指出我的错误,我将不胜感激。
如果您喜欢它,请给我一个star。