[[[NSNotificationCenter defaultCenter] rac_addObserverForName:@"lala" object:nil] subscribeNext:^(NSNotification * _Nullable x) {
NSLog(@"NSNotification = %@",x);
}];
複製代碼
UIControl 的子類均可以使用下面的方法 監聽 UIControlEvents 的事件objective-c
[[self.button rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(__kindof UIControl * _Nullable x) {
NSLog(@"x == %@",x);
[[NSNotificationCenter defaultCenter] postNotificationName:@"lala" object:@"map"];
}];
複製代碼
filter 過濾信號, 只有當 value.length > 5 符合 BOOL 的值才能訂閱到編程
// filter 過濾信號 符合添加的信號能夠訂閱到
[[self.textFiled.rac_textSignal filter:^BOOL(NSString * _Nullable value) {
return value.length > 5;
}] subscribeNext:^(NSString * _Nullable x) {
NSLog(@"length > 5 %@",x);
}];
複製代碼
map 能夠轉變信號markdown
// 對信號進行組合
[[self.textFiled.rac_textSignal map:^id _Nullable(NSString * _Nullable value) {
return [NSString stringWithFormat:@"map %@",value];
}] subscribeNext:^(id _Nullable x) {
NSLog(@"map == %@",x);
}];
複製代碼
ignore 對信號進行過濾ide
// ignore 直接忽略某個信號
[[self.textFiled.rac_textSignal ignore:@"1"] subscribeNext:^(NSString * _Nullable x) {
NSLog(@"ignore 1 == %@",x);
}];
複製代碼
使用 take 轉換信號,能夠編程倒計時函數
//定時器
RACSignal *intervalSignam = [RACSignal interval:1 onScheduler:[RACScheduler mainThreadScheduler]];
// 只取前三個 也就是倒計時3秒
RACSignal *counter = [intervalSignam take:3];
// 只會顯示前三個值
[counter subscribeNext:^(id _Nullable x) {
NSLog(@"interval = %@",x);
}];
複製代碼
使用 delay 能夠延遲倒計時oop
//定時器
RACSignal *intervalSignam = [RACSignal interval:1 onScheduler:[RACScheduler mainThreadScheduler]];
// 只取前三個 也就是倒計時3秒
RACSignal *counter = [[intervalSignam take:3] delay:2];
// delay
[counter subscribeNext:^(id _Nullable x) {
NSLog(@"interval = %@",x);
}] ;
複製代碼
NSArray -> RACSequence -> RACSignalpost
NSArray *array = @[@1,@2,@3,@4,@5];
[array.rac_sequence.signal subscribeNext:^(id _Nullable x) {
NSLog(@"array = %@",x);
}];
複製代碼
字典學習
NSDictionary -> RACSequence -> RACSignalui
字典訂閱到的結果是 RACTuple
元祖類atom
NSDictionary*dictionary=@{@"key1":@"value1",@"key2":@"value2",@"key3":@"value3"};
[dictionary.rac_sequence.signal subscribeNext:^(id _Nullable x) {
NSLog(@"dictionary = %@",x);
}];
[dictionary.rac_keySequence.signal subscribeNext:^(id _Nullable x) {
NSLog(@"dictionary_key = %@",x);
}];
[dictionary.rac_valueSequence.signal subscribeNext:^(id _Nullable x) {
NSLog(@"dictionary_value = %@",x);
}];
複製代碼
RACSubject 能夠實現一些相似 Block 中的經常使用的用法
@interface DSButtonView : UIView
@property (nonatomic, strong) UIButton *sender;
@property (nonatomic, strong) RACSubject *subjtct;
@end
複製代碼
@implementation DSButtonView
-(instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
}
return self;
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
if (self.subjtct) {
[self.subjtct sendNext:@"666"];
}
}
複製代碼
在使用的地方確認
self.but.subjtct = [RACSubject subject];
[self.but.subjtct subscribeNext:^(id _Nullable x) {
NSLog(@"subject == %@",x);
}];
複製代碼
RACObserve 能夠監聽屬性的變化,即便是非 id 類型
@property(nonatomic, assign) NSInteger counter;
複製代碼
[RACObserve(self, counter) subscribeNext:^(id _Nullable x) {
NSLog(@"x == %@",x);
}];
複製代碼
經過 keyPath 監聽屬性的變化
[[self.but rac_valuesForKeyPath:@"frame" observer:self] subscribeNext:^(id _Nullable x) {
NSLog(@"frame == %@",x);
}];
複製代碼
經過 RAC(<#TARGET, ...#>) 這個宏,將屬性相互綁定,
將 self.view 的背景顏色 和 textFiled 輸入的文本信息相互綁定
RAC(self.view,backgroundColor) = [self.textFiled.rac_textSignal map:^id _Nullable(NSString * _Nullable value) {
return [value isEqualToString:@"666"] ? [UIColor redColor]: [UIColor greenColor];
}];
複製代碼
忽略重複的信號,在使用 rac_textSignal 發現會發出兩個一樣的信號
[[self.textFiled.rac_textSignal map:^id _Nullable(NSString * _Nullable value) {
return [NSString stringWithFormat:@"map %@",value];
}] subscribeNext:^(id _Nullable x) {
NSLog(@"map == %@",x);
}];
複製代碼
輸出
2021-05-06 14:11:43.830551+0800 ptf[597:150589] map == map 在一塊兒
2021-05-06 14:11:43.832338+0800 ptf[597:150589] map == map 在一塊兒
複製代碼
使用 distinctUntilChanged
在信號不同的時候才發出訂閱, 以下
[[[self.textFiled.rac_textSignal map:^id _Nullable(NSString * _Nullable value) {
return [NSString stringWithFormat:@"map %@",value];
}] switchToLatest] subscribeNext:^(id _Nullable x) {
NSLog(@"map == %@",x);
}];
複製代碼