iOS中RAC的使用

作者: Hither | 来源:发表于2016-08-08 00:37 被阅读8530次
  • Reactive Cocoa(RAC)是一个支持FRP(函数响应式编程)的框架;详细的就不再多介绍了,直接说说在我们开发中一些RAC的常见用法;

替换代理

场景:一个View中放着一个Button
当我们点击Button的时候,视图控制器如果需要知道这个Button被点击了,一般我们需要写一个代理去通知控制器。
在RAC中我们不需要写代理,我们需要这样做:
[[_redView rac_signalForSelector:@Selector(btnClicked:)]subscribeNext:^(id x){
      NSLog(@"View中的按钮被点击了");
}];
//这样做 是将一个方法转换成信号

KVO

监听一些属性的变化,只要属性改变就会调用,并把改变的值传递给你。
如:
@property(noatomic,assign) int age;

[[self rac_valueForKeyPath:@"age" observer:nil] subscribeNext:^(id x ){
    NSLog(@"%@",x);
}];

//模拟一个事件  触摸屏幕 就让age自增
-(void)touchesBegin:(NSSet<UITouch*>*)touches WithEvent:(UIEvent*)event{
    age++;
}

监听事件

监听一个按钮的点击事件:
[[_btn rac_signalForControlEvents:UIControlEventsTouchUpInside] subscribeNext:^(id x ){
      NSLog(@"点击了按钮");//在其中 我们做以前单独拿出去写的事件方法一样的事情
}];

监听通知

如监听键盘弹出:
[[NSNotificationCenter defaultCenter] rac_addObserverForName: UIKeyboardWillShowNotification  object:nil] subscribeNext:^(id x ){
      NSLog(@"键盘弹出");
}];

监听文本框文字改变

[_textField.rac_textSignal subscribeNext:^(id x){
      NSLog(@"%@",x);//这里的X就是文本框的文字
}];

需要几个地方数据请求都完成以后再刷新界面的需求

RACSignal*signalA = [RACSignal createSignal:^RACDisposable *(id <RACSubscribe>subscriber){
  NSLog(@"数据请求1");
[subscriber sendNext:@"数据请求1请求下来的数据"];
return nil;
}];

RACSignal*signalB = [RACSignal createSignal:^RACDisposable *(id <RACSubscribe>subscriber){
  NSLog(@"数据请求2");
[subscriber sendNext:@"数据请求2请求下来的数据"];
return nil;
}];

//将两个信号组合 如果两个都有信号发出 则执行回调方法 
[self rac_liftSelector:@Selector(updateUI:new:) withSignalFromArray:@[signalA,signalB]];
//在这里需要注意 数组中有几个参数 回调方法里也应该有几个参数!

常用的宏

1.
[_textField.textSignal subscribeNext:^(id x ){
    self.label.text = x;
}];

//把一个对象的某个属性绑定成一个信号,只要发出信号,就会把信号的内容给对象的属性赋值。
上面的三行代码用下面这个宏代替:
RAC(self.label.text) = _textField.rac_textSignal;

其中RAC()括号中  是需要你填写的目标对象的属性;
2.KVO  (快速监听某个对象的某个属性改变)

如:监听当前视图控制器中心点的变化
[RACObserver (self.view,center) subscribeNext:^(id x){

}];

3. Block中使用self 避免循环引用的出现
@weakify(self);//将self转换成弱指针
RACSignal*signalB = [RACSignal createSignal:^RACDisposable *(id <RACSubscribe>subscriber){ 
@strongify(self);//转换成强指针 避免在block中被释放
NSLog(@"%@",self.view);
return nil;}];
4.元组
//快速组装元组
RACTuple*tuple = RACTuplePack(@1,@3);
NSLog(@"%@",tuple);
//快速解析元组
RACTupleUnPack(NSNumber*num1,NSNumber*num2) = tuple;
//宏的参数表示你需要把这个元组解析成什么类型的数据

最近看到一篇写的很详细的:

[http://limboy.me/tech/2013/12/27/reactivecocoa-2.html]

相关文章

  • IOS RAC实践

    前言 RAC使用-->IOS RAC使用 -- ReactiveObjC 本文使用RAC+MVVM来模拟用户登录 ...

  • RAC iOS

    使用RAC 1.target-action RAC最基本的入门使用技巧就是对事件的监听。 PS:在iOS开发中,我...

  • ReactiveCocoa详解

    一、RAC介绍 RAC 是一个 iOS 中的函数式响应式编程框架,一般与MVVM配套使用。在非RAC开发中,都是习...

  • RAC简介

    前言 RAC是iOS开发中经常使用到响应式框架,在OC中可以通过pod导入 RAC信号创建与发送 RAC中一个常见...

  • iOS中RAC的使用

    Reactive Cocoa(RAC)是一个支持FRP(函数响应式编程)的框架;详细的就不再多介绍了,直接说说在我...

  • iOS RAC学习

    一、RAC使用基础认知 RAC编程思想:响应式编程+函数式编程 在iOS中,类之间的传值,无非就是block、de...

  • iOS RAC常见问题汇总

    简介:本文主要对RAC使用过程中遇到的问题进行汇总,方便后续查询和学习。《iOS RAC常用方法汇总》[https...

  • iOS中的RAC的使用

    本篇内容主要记录一下平时项目中经常会用到的rac的情况,不做太深入的研究。 前言 ReactiveCocoa 可以...

  • (一)、iOS RAC - RACSignal

    (一)、iOS RAC - RACSignal (二)、iOS RAC - RACDisposable(三...

  • RAC

    IOS响应式编程框架ReactiveCocoa(RAC)使用示例 感觉RAC响应起来太乱,不太实用,但是平时自己的...

网友评论

  • 夜雨GG:第一个例子就没写清楚,btnClick又不是button的系统方法 ,怎么就绑上btn的View了呢
    后面的让我怎么看
  • 郑明明:不错,写的很精练,一看就知道有哪些常规用法
    Hither:@NtZheng 没有没有 随便写点
  • 茗荚小草:谢谢分享~
  • Legend_劉先森:这个东西还没用过,研究下
    Hither:@Legend_劉先森 共同学习

本文标题:iOS中RAC的使用

本文链接:https://www.haomeiwen.com/subject/qbnlsttx.html