RAC可以实现KVO、代理、通知、block的功能,可谓集多功能于一身。本篇文章介绍RAC是如何代替block传值的。
我们使用RACSubject这个来进行信号的发送和信号的订阅,RACSubject这个类是继承自RACSignal的。
看代码
发送信号:
- (RACSubject *)subject {
if (!_subject) {
_subject = [RACSubject subject];
}
return _subject;
}
// 发送信号
UIColor * randomColor= [UIColor colorWithRed:((float)arc4random_uniform(256) / 255.0) green:((float)arc4random_uniform(256) / 255.0) blue:((float)arc4random_uniform(256) / 255.0) alpha:1.0];
[self.subject sendNext:randomColor];
订阅信号:
[btn.subject subscribeNext:^(id _Nullable x) { // 订阅信号
self.view.backgroundColor = x;
}];
使用RAC三部曲
1.创建信号
2.订阅信号
3.发送信号
代码:
// 1.创建信号
RACSignal * signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
// 3.发送信号
[subscriber sendNext:@"发送信号"];
return nil;
}];
// 2.订阅信号
[signal subscribeNext:^(id _Nullable x) {
NSLog(@"接收内容:%@", x);
} error:^(NSError * _Nullable error) {
}];
打印结果:
2019-11-27 11:23:45.678430+0800 RAC[16608:1337875] 接收内容:发送信号