RAC讲解

/*
 基本技术点:
 bind(绑定):绑定一个信号,可以做中间层处理,返回值是信号,当value改变时,就会触发bing的block,执行完毕后,会才会调用订阅的限号。
 map和flattenMap 用于把源信号内容映射成新的内容,都是利用bing的方式,添加代码中间层,对数据中间处理,在订阅回调之前完成。
 map:把源信号的值映射成一个新的值,返回值是一个值。
 flattenMap:把源信号的内容映射成一个新的信号,信号可以是任意类型,返回是RACReturnSignal。
 
 
 其他属性:
 concat:按一定顺序拼接信号,当多个信号发出的时候,有顺序的接收信号。
 then:用于连接两个信号,当第一个信号完成,才会连接then返回的信号。
 
 -----
 merge:把多个信号合并为一个信号,任何一个信号有新值的时候就会调用,把多个信号合并成一个信号(没有顺序)。
 merge:将数组合并成一个新的信号,当数组中的任一一个信号成功时,就会调用block。
 
 combineLatest:将多个信号合并起来,并且拿到各个信号的最新的值,必须每个合并的signal至少都有过一次sendNext,才会触发合并的信号。
 

 combineLatest:将数组合并成一个新的信号,当数组中的所有信号都成功时,才会调用block
 常见的用法,(先组合在聚合)。combineLatest:(id)signals reduce:(id (^)())reduceBlock。
 
 reduce中的block简介: 聚合也就是合并,和merge,combineLatest结合使用
 reduceblcok中的参数,有多少信号组合,reduceblcok就有多少参数,每个参数就是之前信号发出的内容
 reduceblcok的返回值:聚合信号之后的内容。
 -----
 
 zipWith:把两个信号压缩成一个信号,只有当两个信号同时发出信号内容时,并且把两个信号的内容合并成一个元组,才会触发压缩流的next事件::----夫妻关系。
 filter过滤信号,使用它可以获取满足条件的信号。
 ignore:忽略完某些值的信号。
 take:从开始一共取N次的信号。
 takeLast:取最后N次的信号,前提条件,订阅者必须调用完成,因为只有完成,就知道总共有多少信号。
 takeUntil:(RACSignal *):获取信号直到执行完这个信号,只要传入信号发送完成后或者发送任意数据,就不能再接受源信号的内容。
 distinctUntilChanged:当上一次的值和当前的值有明显的变化就会发出信号,否则会被忽略掉。
 skip:(NSUInteger):跳过几个信号,不接受。
 switchToLatest:用于signalOfSignals(信号的信号),有时候信号也会发出信号,会在signalOfSignals中,获取signalOfSignals发送的最新信号。
 doNext: 执行Next之前,会先执行这个Block。
 doCompleted: 执行sendCompleted之前,会先执行这个Block。
 deliverOn: 内容传递切换到制定线程中,副作用在原来线程中,把在创建信号时block中的代码称之为副作用。
 subscribeOn: 内容传递和副作用都会切换到制定线程中。
 timeout:超时,可以让一个信号在一定的时间后,自动报错。
 interval 定时:每隔一段时间发出信号。
 delay 延迟发送next。
 retry重试 :只要失败,就会重新执行创建信号中的block,直到成功。
 replay重放:当一个信号被多次订阅,反复播放内容。
 throttle节流:当某个信号发送比较频繁时,可以使用节流,在某一段时间不发送信号内容,过了一段时间获取信号的最新内容发出。
 
 
 RACCommand讲解
 RACCommand:是对一个动作的触发以及它产生的后续事件的封装。
 executionSignals:事件执行的结果的回调
 executing:事件执行状态回调
 enabled:动作是否能发生。
 errors:执行失败的回调。
 allowsConcurrentExecution:多次触发这个动作,是否能同时执行。设置为NO,则一个执行完才能继续下一个执行。
 
 
 RACCommand创建表示UI动作的信号。例如,每个信号都可以代表一个按钮,并有与之相关的额外工作。

 self.button.rac_command = [[RACCommand alloc] initWithSignalBlock:^(id _) {
 NSLog(@"button was pressed!");
 return [RACSignal empty];
 }];
 
 
 宏:
 RAC:把一个对象的某个属性绑定一个信号,只要发出信号,就会把信号的内容给对象的属性赋值。例如:RAC(self.label, text) = self.textField.rac_textSignal,给label的text属性绑定了文本框改变的信号,如果textField改变,就会赋给text。
 RACObserve:快速的监听某个对象的某个属性改变,返回的是一个信号,对象的某个属性改变的信号。
 
*/

你可能感兴趣的:(iOS)