美文网首页
04RAC-RACSubject

04RAC-RACSubject

作者: myk | 来源:发表于2018-05-18 10:49 被阅读9次
    • 我们完全可以用RACSubject代替代理/通知,确实方便许多
    • 点击第二个控制的按钮,返回第一个控制器,并将“pop”赋值到按钮的title上面
    RACSubject和RACReplaySubject的区别:
    RACSubject必须要先订阅信号之后才能发送信号, 而RACReplaySubject可以先发送信号后订阅.
    
    • 步骤:
    步骤:
     // 1.创建信号
     RACSubject *subject = [RACSubject subject];
     
     // 2.订阅信号
     [subject subscribeNext:^(id x) {
     // block:当有数据发出的时候就会调用
     // block:处理数据
     NSLog(@"%@",x);
     }];
     
     // 3.发送信号
     [subject sendNext:value];
    
    • 实现
    //第一个控制器中
    FirstViewController *fist = [[FirstViewController alloc] init];
    fist.subject = [RACSubject subject];
    
    [fist.subject subscribeNext:^(NSString *x) {
         [self.btn setTitle:x forState:UIControlStateNormal];
    }];
        
    [[[[self.btn rac_signalForControlEvents:UIControlEventTouchUpInside]
           doNext:^(id x) {
             self.btn.enabled = NO;
     }] flattenMap:^RACStream *(id value) {
          return [self viewModel];
    }] subscribeNext:^(NSNumber *isSuccess) {
           self.btn.enabled = YES;
           NSLog(@"isSuccess ==== %@", isSuccess);
           if ([isSuccess boolValue]) {
    //跳转到第二个控制器
              [self.navigationController pushViewController:fist animated:YES];
           }
    }];
    
    //第二个控制器
    .h文件
    #import <UIKit/UIKit.h>
    @interface FirstViewController : UIViewController
    @property (nonatomic) RACSubject *subject;
    @end
    
    .m文件
    -(void)btnAction:(UIButton *)sender{
        [self.subject sendNext:@"pop"];
        [self.navigationController popViewControllerAnimated:YES];
    }
    

    相关文章

      网友评论

          本文标题:04RAC-RACSubject

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