只是做个记录,不值一看,but–对于初初初了解RAC的盆友不妨看一下这个demo
1.target事件
//target
//传统oc中解决循环引用问题的方法
// __weak typeof(self) weakS = self;
//在RAC中的解决方法
//导入头文件 #import <ReactiveObjC/RACEXTScope.h>
@weakify(self)
[[self.btn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(__kindof UIControl * _Nullable x) {
NSLog(@"x = %@",x);
//强引用 注意 没有报警告 RAC的坑 循环引用 原来
// weakS.lab.text = @"hello";
//现在
@strongify(self)
self.lab.text = @"hello";
}];
2.textField值
[self.textField.rac_textSignal subscribeNext:^(id x)
//textField的值
NSLog(@"%@",x);
}];
打印情况1).程序进入 2).textField响应(点击未操作,使其成为第一响应者)
3).开始输入(值变化)
3.通知
[[[NSNotificationCenter defaultCenter] rac_addObserverForName:@"test" object:nil]subscribeNext:^(NSNotification * _Nullable x) {
NSLog(@"aaa%@, %@",x.object,x.userInfo);
}];
//在某个地方post一个“test”通知
4.监听方法
简例:监听视图A中的btnClick:方法和sendMsg:方法
视图A的.m文件
- (IBAction)btnClick:(id)sender {
[self sendMsg:@"hello Controller"];
}
- (void)sendMsg:(id)msg{
}
监听方法的controller
//方法1.
[[view rac_signalForSelector:@selector(btnClick:)] subscribeNext:^(RACTuple * _Nullable x) {
NSLog(@"监听了btn的点击事件");
NSLog(@"111 %@",x);
}];
//方法2
[[view rac_signalForSelector:@selector(sendMsg:)]subscribeNext:^(RACTuple * _Nullable x) {
NSLog(@"%@",x);
}];
打印结果
5.kvo
//1.
@weakify(self)
[RACObserve(self.person, name) subscribeNext:^(id _Nullable x) {
NSLog(@"x = %@",x);
@strongify(self)
//注意强引用的内存泄漏问题
self.lab.text = x;
}];
//2.
[_view rac_observeKeyPath:@"frame" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew observer:nil block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {
NSLog(@"change = %@",change);
}];
//3.
[[_view rac_valuesAndChangesForKeyPath:@"frame" options:NSKeyValueObservingOptionNew observer:nil] subscribeNext:^(RACTwoTuple<id,NSDictionary *> * _Nullable x) {
NSLog(@"%@",x);
}];
6.值绑定
//btn的enabled属性的值 由 tf1 & tf2 的值的长度共同决定
RAC(self.btn,enabled) = [RACSignal combineLatest:@[_tf1.rac_textSignal,_tf2.rac_textSignal] reduce:^id _Nullable(NSString *name,NSString *pwd){
return @(name.length && pwd.length);
}];