获得信号的方式
1.Cocoa桥接
UIView * view;
UIButton * view1;
RACSignal * sig = [view rac_signalForSelector:@selector(setFrame:)];
RACSignal * sig1 = [view1 rac_signalForControlEvents:UIControlEventTouchUpInside];
RACSignal * sig2 = RACObserve(view, backgroundColor);
2.信号变换
RACSignal *signal3 = [sig map:^id _Nullable(NSString * value) {
return [value substringFromIndex:1];
}];
3.序列转换
RACSignal * sig4 = [RACSequence new].signal;
订阅信号的基本方式
1.订阅
[sig subscribeNext:^(id _Nullable x) {
} error:^(NSError * _Nullable error) {
} completed:^{
}];
2.绑定
RAC(view, backgroundColor) = sig;
3.Cocoa桥接
[view rac_liftSelector:@selector(convertRect:toView:) withSignals:sig,sig1];
[view rac_liftSelector:@selector(convertRect:toView:) withSignalsFromArray:@[sig,sig1]];
[view rac_liftSelector:@selector(convertRect:toView:) withSignalOfArguments:sig1];
Rac的数量操作
1.fliter:[[self.textField.rac_textSignal filter:^BOOL(NSString * _Nullable value) {
NSLog(@"%@",value);
return [value length] > 5;
}] subscribeNext:^(NSString * _Nullable x) {
NSLog(@"%@", x);
}];
2.take:RACSignal *sigD = [sigA take:1];
3.skip: RACSignal *sigD = [sigA skip:1];
4.startWith:RACSignal *sigD = [sigA startWith:@1];
5.repeat:RACSignal *sigD = [sigA repeat];
6.Retry:RACSignal *sigD = [sigA retry:2];
Rac时间操作
1.delay:RACSignal *sigD = [sigA delay:1];
RACSignal * interval = [[[RACSignal return:@"1"] delay:1] repeat];
[interval subscribeNext:^(id _Nullable x) {
NSLog(@"%@",x);
}];
2.Throttle:RACSignal * interval = [[RACSignal return:@"1"] throttle:2];
[interval subscribeNext:^(id _Nullable x) {
NSLog(@"%@",x);
}];
解释:每两秒以最后一个值为节点。推迟两秒订阅新值
Rac多个信号的组合
1.Concat: RACSignal * conSig = [sigB concat:sigA];
2.RACSignal * sigmer = [sigA merge:sigB];
RACSignal * sigmer = [RACSignal merge:@[sigA,sigB]];
RACSignal * sigmer = [RACSignal merge:RACTuplePack_(sigA,sigB)];
![4A93B471-3781-4DBA-B1E5-192117107C4D.png](https://img.haomeiwen.com/i9717104/4ac310260c432cfa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
3.zip:RACSignal * sig1= [[self rac_signalForSelector:@selector(viewWillAppear:)] mapReplace:@"我是出现"];
RACSignal * sig2 = [[self rac_signalForSelector:@selector(viewWillDisappear:)] mapReplace:@"我是销毁"];
RACSignal * sig3 = [sig1 zipWith:sig2];
解释:希望同时获取两个新号。不分顺序
网友评论