基础-> https://www.jianshu.com/p/cd4031fbf8ff

  • 在RAC中,万物皆信号。
  • RAC 指的就是 RactiveCocoa ,是 Github 的一个开源框架,能够通过信号提供大量方便的事件处理方案,让我们更简单粗暴地去处理事件,现在分为 ReactiveObjC(OC) 和 ReactiveSwift(swift)。
  • 团队协作时,必须注意一个点,对于很熟悉RAC的人来说,使用RAC是非常方便的。但对于不熟悉RAC的人来说,由于RAC的可阅读性是很差的,所以需耗费大量时间阅读和学习。
  • 未避免循环引用,需使用@weakify(self),@strongify(self)。这两个宏至少是一对出现的
  • RAC架构框架图

     
  • 信号流程

     

开始使用,要快

一、基本使用

1、基本控件

  • UITextField
//监听文本输入
[[_textField rac_textSignal] subscribeNext:^(NSString * _Nullable x) {
NSLog(@"%@",x);
}]; //可根据自己想要监听的事件选择
[[_textField rac_signalForControlEvents:UIControlEventEditingChanged] subscribeNext:^(__kindof UIControl * _Nullable x) {
NSLog(@"%@",x);
}];
//添加条件 -- 下面表示输入文字长度 > 10 时才会调用subscribeNext
[[_textField.rac_textSignal filter:^BOOL(NSString * _Nullable value) {
return value.length > 10;
}] subscribeNext:^(NSString * _Nullable x) {
NSLog(@"输入框内容:%@", x);
}];
UIButton
//监听按钮点击事件
[[_btn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(__kindof UIControl * _Nullable x) {
NSLog(@"-->%@",x);
}];
  • 计时器(interval、delay)
//类似timer
@weakify(self)
self.disposable = [[RACSignal interval:2 onScheduler:[RACScheduler mainThreadScheduler]] subscribeNext:^(NSDate * _Nullable x) {
@strongify(self)
NSLog(@"时间:%@", x); // x 是当前的时间
//关闭计时器
[self.disposable dispose];
}];
//延时
[[[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:@"延时2秒"];
return nil;
}] delay:2] subscribeNext:^(id x) { NSLog(@"-->%@",x);
}];
2、监听属性变化
//监听self的name属性
[RACObserve(self, name) subscribeNext:^(id _Nullable x) {
NSLog(@"属性的改变-->%@",x);
}];
[[self rac_valuesForKeyPath:@"name" observer:self] subscribeNext:^(id _Nullable x) {
NSLog(@"属性的改变-->%@", x);
}];
//此处RAC宏相当于让_label订阅了_textField的文本变化信号
//赋值给label的text属性
RAC(_label, text) = _textField.rac_textSignal;

3、遍历数组和字典

//遍历数组
NSArray *array = @[@"1", @"2", @"3", @"4", @"5"];
[array.rac_sequence.signal subscribeNext:^(id _Nullable x) {
NSLog(@"内容-->%@", x)
}];
 

4、监听 Notification 通知事件

[[[NSNotificationCenter defaultCenter] rac_addObserverForName:@"notification" object:nil] subscribeNext:^(NSNotification * _Nullable x) {
NSLog(@"-->%@", x);
}];

5、代替Delegate代理

//监听按钮点击方法的信号
//当执行完btnClickAction后会执行此订阅
[[self rac_signalForSelector:@selector(btnClickAction:)] subscribeNext:^(RACTuple * _Nullable x) {
NSLog(@"-->%@", x);
}];
-(void) btnClickAction:(UIButton *)btn
{
NSLog(@"按钮点击");
}

二、RAC常用类

  • RACSignal
  RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
[subscriber sendNext:@"

最新文章

  1. 使用nodeJs安装Vue-cli
  2. spring 异常记录
  3. Struts2------通配符
  4. Android学习笔记之Json的使用....
  5. SequoiaDB 系列之五 :源码分析之main函数
  6. LCA最近公共祖先 Tarjan离线算法
  7. VS设置背景色减缓眼睛疲劳
  8. Deal with Android phones with pattern lock on
  9. mysql 任意连接
  10. C# - dynamic 类型
  11. jQuery 表单验证插件——Validation(基础)
  12. upload 简单的封装
  13. iOS学习——tableview中带编辑功能的cell键盘弹出遮挡和收起问题解决
  14. python基础知识9---字符串拼接,深浅拷贝,三元运算
  15. jenkins X实践系列(3) —— jenkins X 安装拾遗
  16. Spark--sql--所有函数举例(spark-2.x版本)
  17. 3 Oracle 32位客户端安装及arcgis连接
  18. SqlServer基础语法(二)
  19. python实现音乐播放器
  20. 在Visual Studio中使用序列图描述对象之间的互动

热门文章

  1. xcode运行demo报错:Failed to create provisioning profile.cannot be registered to your development team
  2. luoguP5495:Dirichlet 前缀和
  3. 学习Spring-Data-Jpa(九)---注解式方法查询之@NamedQuery、@NamedNativeQuery
  4. 7.Go退出向Consuk反注册服务,优雅关闭服务
  5. Pandas | 15 窗口函数
  6. ZBX_TCP_READ() time out windows
  7. 【转】C++11新特性——lambda表达式
  8. T1 :最小值(min)题解 ——2019.10.15
  9. django数据请求
  10. Spring Boot 知识笔记(整合Mybatis)