您好,欢迎来到花图问答。
搜索
您的当前位置:首页04RAC-RACSubject

04RAC-RACSubject

来源:花图问答
  • 我们完全可以用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];
}

Copyright © 2019- huatuowenda.com 版权所有 湘ICP备2023022495号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务