美文网首页
RAC的使用总结

RAC的使用总结

作者: IOS_Wek | 来源:发表于2020-09-12 13:55 被阅读0次

PS: 新公司代码好多用了RAC 还有MVVM这一套,所以熟悉一下,阅读代码可以比较畅通无阻。

看了很多貌似还是很多看不懂,anyway,先记录一下我看的。来个栗子。
1,一个发送信号,一个接收信号。(网络场景)

    - (RACSignal<ReturnModel *> *)createSignal{
RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) 

    /* 发送信号 */ 
  //延迟发送,就当是网络请求了。
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        ReturnModel *model = [ReturnModel new];
        model.name = @"hello";
        model.title = @"title";
        [subscriber sendNext:model];
    });
   return nil;
}];
return signal;

}

//接收信号,就酱紫。简单模拟一个网络返回捕捉的

[[self createSignal] subscribeNext:^(ReturnModel * _Nullable response) {
    //接收信号
     NSLog(@"信号内容:%@", response.name);
}];

2,用RACCommond,应用场景,去捕捉一下Error

 self.command = [[RACCommand alloc] initWithSignalBlock:^RACSignal * _Nonnull(id  _Nullable input) {
   return [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
        if(1){
      //如果成功了。那就万事大吉。
            [subscriber sendCompleted];
            
        }else{
    //失败了,就抛出来。
            NSError* error = [NSError errorWithDomain:@"failed"
                                                 code:@"0"
                                             userInfo:@{NSLocalizedFailureReasonErrorKey:@"fa.."}];
            [subscriber sendError:error];
        }
   //这里返回失败,这样后面可以捕捉
        return [RACDisposable disposableWithBlock:^{
            [subscriber sendError:nil];
        }];
    }];
}];


[[[self.command execute:@(1)] takeUntil:self.rac_willDeallocSignal].deliverOnMainThread subscribeError:^(NSError * _Nullable error) {
    if ([error.domain isEqualToString:@"false"]) {
        NSLog(@"123123");
    } else if ([error.domain isEqualToString:@"failed"]) {
        NSLog(@"45666");
    }
} completed:^{

}];

3, 通过监听过滤后的信号量,来去做操作。
首先,单例里面信号量是这样。

- (RACSignal<RACTuple *> *_Nonnull)statusSignal {
__weak typeof(self) weakSelf = self;
return [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
    __strong typeof(self) strongSelf = weakSelf;
    [[RACObserve(strongSelf, newStatus) takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id  _Nullable x) {
       
        [subscriber sendNext:[RACTuple tupleWithObjects:@(self.oldStatus), @(self.newStatus), nil]];
    }];
    return [RACDisposable disposableWithBlock:^{
        
    }];
}];

}

过滤的代码

- (RACSignal * _Nonnull)statusReachableSignal {
__weak typeof(self) weakSelf = self;
return [[[self statusSignal] map:^id _Nullable(RACTuple * _Nullable value) {
    return value.second;
}] filter:^BOOL(NSNumber * _Nullable value) {
    __strong typeof(self) strongSelf = weakSelf;
   if (value ==1)
    return 1;
   else return 0;
}];

}

外面VC监控单例的status

[[[[TestManager sharedManager] statusReachableSignal] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id  _Nullable x) {
        NSLog(@"3434");
    }];

4,关于RACSubject,这个应该是最简单的了。

  - (void)clickB{
[self.createButtonClickSubject sendNext:@"hello"];

}

- (RACSubject *)createButtonClickSubject{
if(!_createButtonClickSubject) {
    _createButtonClickSubject = [RACSubject subject];
}

return _createButtonClickSubject;

}

  [self.oView.createButtonClickSubject subscribeNext:^(id  _Nullable x) {
    NSLog(@"这边接受%@",x);
}];

相关文章

  • RAC自己练习下

    ReactiveCocoa使用个人总结 ReactiveCocoa简介 ReactiveCocoa(简称RAC)是...

  • RAC使用总结

    RAC使用测试Demo下载:github.com/FuWees/WPRACTestDemo 1.ReactiveC...

  • RAC的使用总结

    PS: 新公司代码好多用了RAC 还有MVVM这一套,所以熟悉一下,阅读代码可以比较畅通无阻。 看了很多貌似还是很...

  • IOS RAC实践

    前言 RAC使用-->IOS RAC使用 -- ReactiveObjC 本文使用RAC+MVVM来模拟用户登录 ...

  • RAC(ReactiveCocoa)使用方法(一)

    RAC(ReactiveCocoa)使用方法(一)RAC(ReactiveCocoa)使用方法(二) 什么是RAC...

  • iOS rac使用总结

    RAC简介 RAC就是一个第三方库,他可以大大简化你的代码过程。官方的说,ReactiveCocoa(其简称为RA...

  • RAC使用

    RAC常用宏 KVO监听使用 RAC宏使用 信号类使用 使用信号模拟代理 rac_sequence遍历字典 解包元...

  • iOS RAC的使用总结

    ReactiveCocoa(简称RAC),是GitHub上开源的一个应用于iOS和OS X开发的一个新框架.RAC...

  • RAC

    ReactiveCocoa入门 学习RAC小记-适合给新手看的RAC用法总结RAC稍深入-适合新手学习RAC iO...

  • RAC 的使用

    RAC(ReactiveCocoa) 使用详解 RAC 是什么? ReactiveCocoa(RAC) githu...

网友评论

      本文标题:RAC的使用总结

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