iOS RAC使用补充

1  延迟执行

[[RACScheduler mainThreadScheduler] afterDelay: schedule:^{
NSLog(@"延迟执行。。");
}];

2  定时器

[[RACSignal interval: onScheduler:[RACScheduler mainThreadScheduler]] subscribeNext:^(NSDate * _Nullable x) {
NSLog(@"间隔执行。");
}];

3 核心方法bind

- (void)bind{
// 假设想监听文本框的内容,并且在每次输出结果的时候,都在文本框的内容拼接一段文字“输出:” // 方式一:在返回结果后,拼接。
[self.textField.rac_textSignal subscribeNext:^(id x) { NSLog(@"输出:%@",x);
}]; // map
[[_textField.rac_textSignal map:^id(id value) {
// 当源信号发出,就会调用这个block,修改源信号的内容
// 返回值:就是处理完源信号的内容。
return [NSString stringWithFormat:@"输出:%@",value];
}] subscribeNext:^(id x) { NSLog(@"%@",x);
}]; }

4  concat 方法

- (void)concat{
RACSignal *signalA = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { [subscriber sendNext:@];
[subscriber sendCompleted]; return nil;
}];
RACSignal *signalB = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { [subscriber sendNext:@]; return nil;
}]; // 把signalA拼接到signalB后,signalA发送完成,signalB才会被激活。
RACSignal *concatSignal = [signalA concat:signalB]; // 以后只需要面对拼接信号开发。
// 订阅拼接的信号,不需要单独订阅signalA,signalB
// 内部会自动订阅。
// 注意:第一个信号必须发送完成,第二个信号才会被激活
[concatSignal subscribeNext:^(id x) { NSLog(@"%@",x); }]; }

类似的方法还有:zipWith(信号合并)     combineLatestWith(信号合并)

5  combineLatest  和reduce  的结合使用

使用案例

 @weakify(self)
RACSignal *signalA = self.textField.rac_textSignal;
RACSignal *singalB = self.passwordField.rac_textSignal;
[[RACSignal combineLatest:@[signalA,singalB] reduce:^id(NSString *account,NSString *password){
return @(account.length > && password.length > );
}] subscribeNext:^(NSNumber *x) {
@strongify(self)
NSLog(@"subscribeNext %@",x);
self.button.enabled = x.integerValue;
}];

6  双向绑定

声明一个属性

@property (nonatomic , copy) NSString *name;

创建一个label

  UILabel *myL = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 50)];
myL.textColor = [UIColor lightGrayColor];
[self.view addSubview:myL];

实现绑定

RACChannelTo(myL,text,@"") = RACChannelTo(self,name); //双向绑定

这种绑定是双向的。左边的值改了右边的值也会一起改。同理右边的改了左边的也会同步修改。

RACChannelTo  中的三个参数1:对象   2:属性值   3:默认值(为null的时候默认显示的值)

上一篇:Oracle——数据库启动与关闭


下一篇:iOS单元測试:Specta + Expecta + OCMock + OHHTTPStubs + KIF