一些简单的用法
通知
[[[NSNotificationCenter defaultCenter] rac_addObserverForName:@"lala" object:nil] subscribeNext:^(NSNotification * _Nullable x) {
NSLog(@"NSNotification = %@",x);
}];
复制代码
UIControl
UIControl 的子类都可以使用下面的方法 监听 UIControlEvents 的事件
[[self.button rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(__kindof UIControl * _Nullable x) {
NSLog(@"x == %@",x);
[[NSNotificationCenter defaultCenter] postNotificationName:@"lala" object:@"map"];
}];
复制代码
UITextFiled
filter 过滤信号, 只有当 value.length > 5 符合 BOOL 的值才能订阅到
// filter 过滤信号 符合添加的信号可以订阅到
[[self.textFiled.rac_textSignal filter:^BOOL(NSString * _Nullable value) {
return value.length > 5;
}] subscribeNext:^(NSString * _Nullable x) {
NSLog(@"length > 5 %@",x);
}];
复制代码
map 可以转变信号
// 对信号进行组合
[[self.textFiled.rac_textSignal map:^id _Nullable(NSString * _Nullable value) {
return [NSString stringWithFormat:@"map %@",value];
}] subscribeNext:^(id _Nullable x) {
NSLog(@"map == %@",x);
}];
复制代码
ignore 对信号进行过滤
// ignore 直接忽略某个信号
[[self.textFiled.rac_textSignal ignore:@"1"] subscribeNext:^(NSString * _Nullable x) {
NSLog(@"ignore 1 == %@",x);
}];
复制代码
interval
使用 take 转换信号,可以编程倒计时
//定时器
RACSignal *intervalSignam = [RACSignal interval:1 onScheduler:[RACScheduler mainThreadScheduler]];
// 只取前三个 也就是倒计时3秒
RACSignal *counter = [intervalSignam take:3];
// 只会显示前三个值
[counter subscribeNext:^(id _Nullable x) {
NSLog(@"interval = %@",x);
}];
复制代码
使用 delay 可以延迟倒计时
//定时器
RACSignal *intervalSignam = [RACSignal interval:1 onScheduler:[RACScheduler mainThreadScheduler]];
// 只取前三个 也就是倒计时3秒
RACSignal *counter = [[intervalSignam take:3] delay:2];
// delay
[counter subscribeNext:^(id _Nullable x) {
NSLog(@"interval = %@",x);
}] ;
复制代码
遍历
NSArray -> RACSequence -> RACSignal
NSArray *array = @[@1,@2,@3,@4,@5];
[array.rac_sequence.signal subscribeNext:^(id _Nullable x) {
NSLog(@"array = %@",x);
}];
复制代码
字典
NSDictionary -> RACSequence -> RACSignal
字典订阅到的结果是 RACTuple
元祖类
NSDictionary*dictionary=@{@"key1":@"value1",@"key2":@"value2",@"key3":@"value3"};
[dictionary.rac_sequence.signal subscribeNext:^(id _Nullable x) {
NSLog(@"dictionary = %@",x);
}];
[dictionary.rac_keySequence.signal subscribeNext:^(id _Nullable x) {
NSLog(@"dictionary_key = %@",x);
}];
[dictionary.rac_valueSequence.signal subscribeNext:^(id _Nullable x) {
NSLog(@"dictionary_value = %@",x);
}];
复制代码
RACSubject
RACSubject 可以实现一些类似 Block 中的常用的用法
@interface DSButtonView : UIView
@property (nonatomic, strong) UIButton *sender;
@property (nonatomic, strong) RACSubject *subjtct;
@end
复制代码
@implementation DSButtonView
-(instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
}
return self;
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
if (self.subjtct) {
[self.subjtct sendNext:@"666"];
}
}
复制代码
在使用的地方确认
self.but.subjtct = [RACSubject subject];
[self.but.subjtct subscribeNext:^(id _Nullable x) {
NSLog(@"subject == %@",x);
}];
复制代码
KVO
RACObserve
RACObserve 可以监听属性的变化,即使是非 id 类型
@property(nonatomic, assign) NSInteger counter;
复制代码
[RACObserve(self, counter) subscribeNext:^(id _Nullable x) {
NSLog(@"x == %@",x);
}];
复制代码
KeyPath
通过 keyPath 监听属性的变化
[[self.but rac_valuesForKeyPath:@"frame" observer:self] subscribeNext:^(id _Nullable x) {
NSLog(@"frame == %@",x);
}];
复制代码
事件绑定
通过 RAC(<#TARGET, …#>) 这个宏,将属性相互绑定,
将 self.view 的背景颜色 和 textFiled 输入的文本信息相互绑定
RAC(self.view,backgroundColor) = [self.textFiled.rac_textSignal map:^id _Nullable(NSString * _Nullable value) {
return [value isEqualToString:@"666"] ? [UIColor redColor]: [UIColor greenColor];
}];
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END