初玩RAC

时间:2022-06-25 06:52:46

之前因为项目的原因以及ReactiveCocoa框架导入到项目老是报错的原因,导致我这边一直没有能好好的将ReactiveCocoa运行起来,最近看了Hank老师的视频,而且项目中我们使用的就是OC,因此还是决定使用ReactiveObjC来尝试一下RAC。

1、下面是写的Demo界面代码:

 -(void)createUI
{
self.view.backgroundColor =[UIColor whiteColor]; UIView * view = [UIView new];
view.backgroundColor = [UIColor orangeColor];
[self.view addSubview:view]; _view =view; [view mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.top.mas_offset();
make.right.mas_offset(-);
make.height.mas_equalTo(); }]; UIButton * btn = [[UIButton alloc] init];
_btn=btn;
btn.backgroundColor =[UIColor redColor];
[view addSubview:btn];
//注意的是当视图为空的时候,界面当然没有办法进行添加,然后自然就会崩溃了
[btn addTarget:_view action:@selector(btnAction) forControlEvents:UIControlEventTouchUpInside];
[btn mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.top.mas_offset();
make.right.mas_offset(-);
make.height.mas_offset();
}]; UIView * testGes = [UIView new];
testGes.backgroundColor = [UIColor redColor];
[self.view addSubview:testGes];
[testGes mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(_view.mas_bottom).offset();
make.left.mas_equalTo(self.view.mas_left).offset();
make.right.mas_equalTo(self.view.mas_right).offset(-);
make.height.mas_equalTo();
}]; #pragma 可以截取到
//1、使用手势也是可以获取到事件,可以截取到
UITapGestureRecognizer * ges = [[UITapGestureRecognizer alloc]init];
[testGes addGestureRecognizer:ges]; [[ges rac_gestureSignal]subscribeNext:^(__kindof UIGestureRecognizer * _Nullable x) {
NSLog(@"触发点击事件");
}]; }

2、RAC代码:

-(void)createRac
{ #pragma 能截取到
// 1、View首先不能为空,然后target上面可以添加到其他View上面 2、进行按钮事件点击事件监听,按钮是没有问题的 rac_signalForSelector
[[_view rac_signalForSelector:@selector(btnAction)] subscribeNext:^(RACTuple * _Nullable x) {
NSLog(@"监听按钮点击事件");
}];
#pragma 不能截取到
//1、使用本身的视图进行监听是没有办法截取到自身的点击事件rac_signalForSelector
[[_btn rac_signalForSelector:@selector(btnAction)] subscribeNext:^(RACTuple * _Nullable x) {
NSLog(@"按钮监听");
}];
#pragma 能截取到
//1、截取button的点击事件的话就直接使用rac_signalForControlEvents
[[_btn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(__kindof UIControl * _Nullable x) {
NSLog(@"截取按钮点击事件");
}]; } -(void)btnAction
{
NSLog(@"按钮点击事件");
//1、可以截取到方法,则没有崩溃,现在若是没有截取到就会造成程序崩溃!
}

【注】说说感受:现在的理解就是,在玩RAC的时候,看了篇文章,上面讲解的时候,说明了其实本质上,RAC在拦截方法,类似于苹果CoreContext劫持方法,即苹果原生和JS互相调用的原理是一样的,因此特别注意了这个问题!

初玩RAC初玩RAC

1、当然现在还没有搞清楚为什么加在_View上面,但是截取到btnAction方法的时候,则直接跳到自己截取到的方法里面!假如没有截取到,就崩溃!说明在这边RAC截取方式就是通过类似于JS劫持的方式来拦截到调用方法的!

初玩RAC