美文网首页iOS经验总结
iOS开发·RAC的使用

iOS开发·RAC的使用

作者: 富城 | 来源:发表于2020-12-05 20:42 被阅读0次
RAC的作用:

将要处理的事情监听的事情的代码放在一起,符合高聚合低耦合的开发思想。

1、RAC用在数组和字典的遍历巧妙用法
  • 遍历数组
@property (nonatomic, strong) NSArray<NewsItemModel *> *dataSourceArr;

// 遍历下数组
[self.dataSourceArr.rac_sequence.signal subscribeNext:^(NewsItemModel * _Nullable x) {
    NSLog(@"%@", x);
}];
  • 遍历字典(使用RACTupleUnpack这个强大的宏,可以直接取得字典中的keyvalue
// 遍历字典
NSDictionary *dict = @{@"name":@"福成", @"age":@22, @"work":@"iOS"};
[dict.rac_sequence.signal subscribeNext:^(id  _Nullable x) {
    // 这是一个强大的宏
    RACTupleUnpack(NSString *key, NSString *value) = x;
    NSLog(@"%@--%@", key, value);
}];
  • 字典转模型
NSArray * dataArr = (NSArray *)[result objectForKey:@"data"];
NSMutableArray *listItemArr = @[].mutableCopy;
// 这个是异步获取,会先走下面的代码,
[dataArr.rac_sequence.signal subscribeNext:^(id  _Nullable x) {
    NewsItemModel *model = [NewsItemModel yy_modelWithDictionary:(NSDictionary *)x];
    [listItemArr addObject:model];
}];
  • map映射
NSMutableArray *listItemArr = @[].mutableCopy;
// RAC的高级用法 array方法:将返回的模型自动添加到数组中
listItemArr = [[[dataArr.rac_sequence map:^id _Nullable(id  _Nullable value) {
    // value: 集合中的元素
    // id : 返回的对象就是映射的值
    return [NewsItemModel yy_modelWithDictionary:value];
}] array] mutableCopy];
RAC开发中的常见用法

1、代替代理

  • 有两种方法:RACSubject:可以传值
// 在对象类.h中添加
@property (nonatomic, strong) RACSubject *btnSignal;

// 在.m中实现
- (RACSubject *)deleteBtnSignal {
    if (_deleteBtnSignal == nil) {
        _deleteBtnSignal = [[RACSubject alloc] init];
    }
    return _deleteBtnSignal;
}
// 在点击事件中
[self.btnSignal sendNext:@1];

// 在控制器中拿到这个类的对象
[_view.btnSignal subscribeNext:^(id  _Nullable x) {
    NSLog(@"监听到了点击事件");
}];
rac_signalForSelector,不能传值(用于监听某个对象有没有调用某个方法)
    // 监听某个对象有没有调用某个方法
    [[self rac_signalForSelector:@selector(viewWillAppear:)] subscribeNext:^(RACTuple * _Nullable x) {
        NSLog(@"调用了viewWillAppear");
}];

2、代替KVO

// 这个用起来不是很方便 还要导入头文件
[_mainTableView rac_observeKeyPath:@"frame" options:NSKeyValueObservingOptionNew observer:nil block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {
        
}];
    
[[_mainTableView rac_valuesForKeyPath:@"frame" observer:self] subscribeNext:^(id  _Nullable x) {
    NSLog(@"%@", x);
}];

3、监听事件:

[[self.deleteBtn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(__kindof UIControl * _Nullable x) {
    NSLog(@"删除按钮点击");
}];

4、代替通知:

[[[NSNotificationCenter defaultCenter] rac_addObserverForName:@"change" object:nil] subscribeNext:^(NSNotification * _Nullable x) {
        
}];

5、监听文本框文字改变:

[_textField.rac_textSignal subscribeNext:^(id x) {
    NSLog(@"%@",x);
}];

6、处理当界面有多次请求时,需要都获取到数据时,才能展示界面。

- (void)RAC_liftSelector {
    RACSignal *hotSignal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
        NSLog(@"请求热销数据");
        [subscriber sendNext:@"hot Data"];
        return nil;
    }];
    RACSignal *newSignal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
        NSLog(@"请求最新数据");
        [subscriber sendNext:@"New Data"];
        return nil;
    }];
    // 数组:存放信号
    // 当数组中的所有信号都发送数据的时候。才会执行方法
    // 方法的参数:必须跟数组的信号一一对应
    // 方法的参数,就是每一个信号发送的数据
    [self rac_liftSelector:@selector(updateUIWithHotData:newData:) withSignalsFromArray:@[hotSignal, newSignal]];
}

- (void)updateUIWithHotData:(NSString *)hotData newData:(NSString *)newData {
    NSLog(@"%@----%@", hotData, newData);
}

相关文章

  • RAC iOS

    使用RAC 1.target-action RAC最基本的入门使用技巧就是对事件的监听。 PS:在iOS开发中,我...

  • ReactiveObjC(RAC)基础

    最近学习了一下RAC的使用,参考了下面两篇文章 Jonzzs的【iOS 开发】ReactiveObjC(RAC)的...

  • IOS RAC实践

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

  • RAC简介

    前言 RAC是iOS开发中经常使用到响应式框架,在OC中可以通过pod导入 RAC信号创建与发送 RAC中一个常见...

  • ReactiveCocoa详解

    一、RAC介绍 RAC 是一个 iOS 中的函数式响应式编程框架,一般与MVVM配套使用。在非RAC开发中,都是习...

  • 2019-12-10

    iOS开发之RAC(一)初级篇 一、RAC是什么? 1、RAC全称:ReactiveCocoa, Github 一...

  • iOS开发·RAC的使用

    RAC的作用: 将要处理的事情和监听的事情的代码放在一起,符合高聚合、低耦合的开发思想。 1、RAC用在数组和字典...

  • iOS 基于MVVM + RAC + ViewModel-Bas

    iOS 基于MVVM + RAC + ViewModel-Based Navigation的微信开发 iOS 基于...

  • 【other】Rac EventBus RxJava

    聊一聊 Rac Rac 是什么 Rac 全称 Reactivecocoa,是一个应用于iOS和OS X开发的框架,...

  • iOS 基于MVVM + RAC + ViewModel-Bas

    iOS 基于MVVM + RAC + ViewModel-Based Navigation的微信开发(二) iOS...

网友评论

    本文标题:iOS开发·RAC的使用

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