前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ReactiveCocoa使用心得

ReactiveCocoa使用心得

作者头像
freesan44
发布2020-04-10 15:51:23
7770
发布2020-04-10 15:51:23
举报
文章被收录于专栏:freesan44freesan44

1.单向绑定

代码语言:javascript
复制
//model->viewmodel的model
   RAC(self.viewModel,model) = RACObserve(self, model);

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

代码语言:javascript
复制
//注意,因为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.双向绑定

代码语言:javascript
复制
RACChannelTo(self.textField, text) = RACChannelTo(self.viewModel, someProperty)

3.RACCommand

代码语言:javascript
复制
-(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;
}

订阅:

代码语言:javascript
复制
[[self.viewModel.openContactManagerCommand execute:nil]subscribeNext:^(NSString*  _Nullable x) {
         self.phoneNumTextField.text = x;
      }];

4.RACSubject

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

订阅

代码语言:javascript
复制
[self.viewModel.openChargeRecordHandlerSbj sendNext:nil];

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

代码语言:javascript
复制
[[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

代码语言:javascript
复制
[[self mutableArrayValueForKey:@"modelArr"]addObject:model];
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档