filter
過濾信號餐曼,使用它可以獲取滿足條件的信號.
//只用當文本框的長度大于11才是想要獲取的文本的內(nèi)容
[[self.useNameTextField.rac_textSignal filter:^BOOL(idvalue) {//這里只用返回Yes雄嚣,才會走下面的方法subscribeNext,返回NO是不會走下面的
// value:源信號的內(nèi)容
NSString*text = (NSString*)value;
if(text.length>11) {
return YES;
}else{
return NO;
}
//返回值就是過濾的條件杉武,只有滿足這個條件才會能夠獲取到內(nèi)容
}]
// 訂閱信號,滿足上面的條件,即可執(zhí)行這里面的方法
subscribeNext:^(idx) {
NSLog(@"%@",x);
self.passWordTextField.backgroundColor= [UIColor greenColor];
}];
ignore:
忽略完某些值的信號.
//創(chuàng)建信號
RACSubject*signal = [RACSubject subject];
//ignore是忽略一些值
//ignoreVlaues忽略所有的值
RACSignal*ignoreSignal = [signal ignore:@"luobo"];
//RACSignal *ignoreSignal = [signal ignoreValues];
//訂閱信號
[ignoreSignal subscribeNext:^(idx) {
NSLog(@"%@",x);
}];
//發(fā)送信號
[signal sendNext:@"luobo"];
[signal sendNext:@"crazy"];
distinctUntilChanged:
當上一次的值和當前的值有明顯的變化就會發(fā)出信號线婚,否則會被忽略掉狼电。
在開發(fā)中蜒灰,刷新UI經(jīng)常使用,只有兩次數(shù)據(jù)不一樣才需要刷新
//創(chuàng)建信號
RACSubject*signal = [RACSubject subject];
//調(diào)用方法后訂閱信號
[[signal distinctUntilChanged] subscribeNext:^(idx) {
NSLog(@"%@",x);
}];
//相當于上面
//RACSignal *distinSignal = [signal distinctUntilChanged];
//[distinSignal subscribeNext:^(id x) {
//NSLog(@"%@",x);
//
//}];
[signal sendNext:@"luobo"];
[signal sendNext:@"luobo"];
[signal sendNext:@"luobo"];
[signal sendNext:@"luo"];
take:
從開始一共取N次的信號
//創(chuàng)建信號
RACSubject*subject = [RACSubject subject];
RACSubject*signal = [RACSubject subject];
// take是取前面的幾個值
//訂閱信號
[[subject take:2] subscribeNext:^(idx) {
NSLog(@"%@",x);
}];
// takeLast:去后面的多少個值肩碟,必須是發(fā)送完的
//只有調(diào)用[subject sendCompleted];才會發(fā)送信號
[[subject takeLast:2]subscribeNext:^(idx) {
NSLog(@"%@",x);
}];
// takeUntil:只要是傳入的信號發(fā)送完成或者是signal發(fā)送信號强窖,就不會接收信號的內(nèi)容
[[signal takeUntil:signal] subscribeNext:^(idx) {
NSLog(@"%@",x);
}];
//發(fā)送數(shù)據(jù)
[subject sendNext:@"1"];
[subject sendNext:@"2"];
[subject sendNext:@"3"];
[subject sendCompleted];
[signal sendNext:@"signal"];
- (RACSignal *)rac_textSignal {
@weakify(self);
return[[[[[RACSignal
concat:[self?rac_signalForControlEvents:UIControlEventEditingChanged]]
map:^(UITextField?*x)?{
returnx.text;
}]
takeUntil:self.rac_willDeallocSignal]//?bingo!
}
switchToLatest:
用于signalOfSignals(信號的信號),有時候信號也會發(fā)出信號削祈,會在signalOfSignals中翅溺,獲取signalOfSignals發(fā)送的最新信號
//創(chuàng)建信號
RACSubject*signalOfSignal = [RACSubjectsubject];
RACSubject*signal = [RACSubjectsubject];
//獲取信號中信號最近發(fā)出的信號,訂閱最近發(fā)出的信號
//注意switchToLatest只能用于信號中的信號
[signalOfSignal.switchToLatestsubscribeNext:^(idx) {
NSLog(@"%@",x);
}];
[signalOfSignalsendNext:signal];// 將信號變?yōu)樾盘栔械男盘?/p>
[signalsendNext:@"signal"];
skip
跳過幾個信號,不接受
//skip:跳躍幾個值再接收被訂閱
//創(chuàng)建信號
RACSubject*subject = [RACSubject subject];
[[subjectskip:2] subscribeNext:^(idx) {//跳躍過兩個髓抑,執(zhí)行下面的幾個
NSLog(@"%@", x);
}];
[subject sendNext:@"LUO"];
[subject sendNext:@"1"];
[subject sendNext:@"3"];
[subject sendNext:@"4"];