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