美文网首页
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

    我们完全可以用RACSubject代替代理/通知,确实方便许多 点击第二个控制的按钮,返回第一个控制器,并将“po...

网友评论

      本文标题:04RAC-RACSubject

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