专栏首页freesan44ReactiveCocoa使用心得

ReactiveCocoa使用心得

1.单向绑定

//model->viewmodel的model
   RAC(self.viewModel,model) = RACObserve(self, model);

在cell中对控件进行绑定,需要添加takeUntil

//注意,因为cell复用问题,所以要在每个UI控件上添加一个takeUntil:self.rac_prepareForReuseSignal
   RAC(self.viewModel.model,MobileNo) = [RACSignal merge:@[[self.phoneNumTextField.rac_textSignal takeUntil:self.rac_prepareForReuseSignal],[RACObserve(self.phoneNumTextField, text) takeUntil:self.rac_prepareForReuseSignal]]];

2.双向绑定

RACChannelTo(self.textField, text) = RACChannelTo(self.viewModel, someProperty)

3.RACCommand

-(RACCommand *)openContactManagerCommand
{
   if (!_openContactManagerCommand) {
      _openContactManagerCommand = [[RACCommand alloc]initWithSignalBlock:^RACSignal * _Nonnull(id  _Nullable input) {
         DebugLog(@"%@",input);
         return [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
            [[LJContactManager sharedInstance] selectContactAtController:Context.rootNavViewController complection:^(NSString *name, NSString *phone) {
               [subscriber sendNext:phone];
               [subscriber sendCompleted];
            }];
            return nil;
         }];
      }];
   }
   return _openContactManagerCommand;
}

订阅:

[[self.viewModel.openContactManagerCommand execute:nil]subscribeNext:^(NSString*  _Nullable x) {
         self.phoneNumTextField.text = x;
      }];

4.RACSubject

-(RACSubject *)openChargeRecordHandlerSbj
{
   if (!_openChargeRecordHandlerSbj) {
      _openChargeRecordHandlerSbj = [RACSubject subject];
      @weakify(self)
      [_openChargeRecordHandlerSbj subscribeNext:^(id  _Nullable x) {
         //TODO: 打开充值记录
      }];
   }
   return _openChargeRecordHandlerSbj;
}

订阅

[self.viewModel.openChargeRecordHandlerSbj sendNext:nil];

5.NSMutableArray 因为NSMutableArray不支持KVO,所以用另外一个方式处理:

[[self rac_valuesAndChangesForKeyPath:@"modelArr" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld observer:nil]subscribeNext:^(RACTwoTuple<id,NSDictionary *> * _Nullable x) {
      @strongify(self)
      NSMutableArray * arr = x.first;
      NSDictionary * changeDic = x.second;
      DebugLog(@"RAC---%@",changeDic);
      [self reloadCollectionView];
   }];

添加对象要用KVO

[[self mutableArrayValueForKey:@"modelArr"]addObject:model];

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • LeetCode 155. 最小栈

    设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。

    freesan44
  • LeetCode 206. 反转链表

    freesan44
  • LeetCode 14. 最长公共前缀

    freesan44
  • Python3结合Sciter编写桌面

    但由于是同一个进程,如果你做了很耗时的操作,比如下载一张图片之类的IO操作......

    py3study
  • 庆祝法国队夺冠:用Python放一场烟花秀

    天天敲代码的朋友,有没有想过代码也可以变得很酷炫又浪漫?今天就教大家用Python模拟出绽放的烟花庆祝昨晚法国队夺冠,工作之余也可以随时让程序为自己放一场烟花秀...

    猫咪编程
  • 接口测试 | 24 requests + unittest集成你的接口测试

    概述 本文就如何结合requests、unittest进行实例演示,如果你还不了解unittest、PO模型,请翻阅公众号前期发布的unittest专题和PO模...

    苦叶子
  • 接口测试 | 24 requests + unittest集成你的接口测试

    概述 本文就如何结合requests、unittest进行实例演示,如果你还不了解unittest、PO模型,请翻阅公众号前期发布的unittest专题和PO模...

    苦叶子
  • Simplex 单纯形算法的python

    算法可以在给定一个包含线性规划问题的标准形式的描述下,求解该线性规划问题。 例如某一个 pro.txt 文件内容如下:

    py3study
  • python post传输文件脚本

    ps:背景,无法ssh相互访问机器(一般中间有堡垒机阻拦)的情况下,但是使用域名可以进行访问的情况下 可以使用http协议进行文件的上传。

    py3study
  • 小甲鱼《零基础学习Python》课后笔记(三十七):类和对象——面向对象编程

    1.当程序员不想把同一段代码写几次,他们发明了函数解决了这种情况。当程序员已经有了一个类,而又想建立一个非常接近的新类,他们会怎么做呢? 定义一个新类继承已有...

    小火柴棒

扫码关注云+社区

领取腾讯云代金券