更丰富、更强大的通知框架
创建一个新的信号,每个信号都是BulbBoolSignal或BulbMutiStatusSignal子类对象。
两个步骤
// BulbConnectToWifiSignal.h
#import "BulbBoolSignal.h"
@interface BulbConnectToWifiSignal : BulbBoolSignal
@end
// BulbConnectToWifiSignal.m
#import "BulbConnectToWifiSignal.h"
@implementation BulbConnectToWifiSignal
+ (NSString *)description
{
return @"BulbConnectToWifiSignal will be fired when connect to wifi";
}
@end
注册信号,可以触发一次
[[Bulb bulbGlobal] registerSignal:[BulbConnectToWifiSignal signal] block:^(id firstData, NSDictionary<NSString *, BulbSignal *> *signalIdentifier2Signal) {
// do wifi work
}];
触发信号
[[Bulb bulbGlobal] fire:[BulbConnectToWifiSignal signal] data:@"firstData"];
注册多个信号
[[Bulb bulbGlobal] registerSignals:@[[BulbConnectToWifiSignal signal], [BulbDataPrepareCompleteSignal signal]] block:^(id firstData, NSDictionary<NSString *, BulbSignal *> *signalIdentifier2Signal) {
// wifi and data prepare compelete do something
}];
注册永久信号,可以多次触发
[[Bulb bulbGlobal] registerSignal:[BulbConnectToWifiSignal signal] foreverblock:^BOOL(id firstData, NSDictionary<NSString *, BulbSignal *> *signalIdentifier2Signal) {
// do wifi work
return YES; // return yes if you want to continue
}];
您可以选择在一些情况下过滤信号,信号相当于没有发生
[[Bulb bulbGlobal] registerSignal:[BulbConnectToWifiSignal signal] block:^(id firstData, NSDictionary<NSString *, BulbSignal *> *signalIdentifier2Signal) {
// do wifi work
} filterBlock:^BOOL(BulbSignal *signal) {
if ([signal.data isEqualToString:@"data1"]) {
return YES; // return yes if you want to filter
}
return NO;
}];
[[Bulb bulbGlobal] fire:[BulbConnectToWifiSignal signal] data:@"data1"]; // this signal is equivalent to not fire
[[Bulb bulbGlobal] fire:[BulbConnectToWifiSignal signal] data:@"data2"];
您可以查看信号到原始状态以处理一些更改逻辑
[[Bulb bulbGlobal] registerSignal:[BulbNetReachableSignal signalWithStatus:@"wifi"] foreverblock:^(id firstData, NSDictionary<NSString *,BulbSignal *> *signalIdentifier2Signal) {
if ([[signalIdentifier2Signal objectForKey:[BulbNetReachableSignal identifier]].originStatus isEqualToString:@"wwlan"]) {
// do work when wwlan -> wifi
}
return YES;
}];
// no work to do
[[Bulb bulbGlobal] fire:[BulbNetReachableSignal signalWithStatus:@"no reachable"] data:nil];
[[Bulb bulbGlobal] fire:[BulbNetReachableSignal signalWithStatus:@"wifi"] data:nil];
// do work
[[Bulb bulbGlobal] fire:[BulbNetReachableSignal signalWithStatus:@"wwlan"] data:nil];
[[Bulb bulbGlobal] fire:[BulbNetReachableSignal signalWithStatus:@"wifi"] data:nil];
以下将打印所有定义的信号,以及信号的注册和发生的历史
NSString* allSignals = [[BulbRecorder sharedInstance] allSignals];
NSLog(@"%@", allSignals);
BULB_RECORDER需要添加到预宏
Bulb是在MIT许可证下发布的。有关更多信息,请参阅LICENSE文件。