DWEventBus 1.0.0

DWEventBus 1.0.0

codewicky 维护。



  • 作者
  • codeWicky

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。