Last active
March 6, 2020 09:19
-
-
Save foxsofter/5ece717adbd5546d0c22f8d4b1dce5ae to your computer and use it in GitHub Desktop.
ReactiveCocoa v2.5 operation demo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- (void)testFilter { | |
RACSignal *signal = [@[ @1, @2, @3 ] rac_sequence].signal; | |
signal = [signal filter:^BOOL(NSNumber *value) { | |
return value.integerValue % 2; | |
}]; | |
[signal subscribeNext:^(NSNumber *value) { | |
NSLog(@"%@", value); | |
}]; | |
} | |
- (void)testMap { | |
RACSignal *signal = [@[ @1, @2, @3 ] rac_sequence].signal; | |
signal = [signal map:^id(NSNumber *value) { | |
return @(value.integerValue * 2); | |
}]; | |
[signal subscribeNext:^(NSNumber *value) { | |
NSLog(@"%@", value); | |
}]; | |
} | |
- (void)testMerge { | |
RACSignal *signal1 = [@[ @1, @2 ] rac_sequence].signal; | |
RACSignal *signal2 = [@[ @4, @5 ] rac_sequence].signal; | |
[[signal2 merge:signal1] subscribeNext:^(NSNumber *value) { | |
NSLog(@"%@", value); | |
}]; | |
} | |
- (void)testCombileLatest1 { | |
RACSignal *signal1 = [@[ @1, @2 ] rac_sequence].signal; | |
RACSignal *signal2 = [@[ @3, @4 ] rac_sequence].signal; | |
[[signal1 combineLatestWith:signal2] subscribeNext:^(NSNumber *value) { | |
NSLog(@"%@", value); | |
}]; | |
} | |
- (void)testCombileLatest2 { | |
RACSignal *signal1 = [@[ @1, @2 ] rac_sequence].signal; | |
RACSignal *signal2 = [@[ @3, @4 ] rac_sequence].signal; | |
[[[signal1 combineLatestWith:signal2] | |
reduceEach:^id(NSNumber *v1, NSNumber *v2) { | |
return @(v1.integerValue * v2.integerValue); | |
}] subscribeNext:^(NSNumber *value) { | |
NSLog(@"%@", value); | |
}]; | |
} | |
- (void)testFlatten { | |
RACSignal *signal1 = [@[ @1, @2 ] rac_sequence].signal; | |
RACSignal *signal2 = [RACSignal return:signal1]; | |
[[signal2 flatten] subscribeNext:^(NSNumber *value) { | |
NSLog(@"%@", value); | |
}]; | |
} | |
- (void)testFlattenMap { | |
RACSignal *signal = [@[ @1, @2 ] rac_sequence].signal; | |
[[signal flattenMap:^RACStream *(NSNumber *value) { | |
return [RACSignal return:@(value.integerValue * 2)]; | |
}] subscribeNext:^(NSNumber *value) { | |
NSLog(@"%@", value); | |
}]; | |
} | |
- (void)testNotReplay { | |
RACSubject *letters = [RACSubject subject]; | |
RACSignal *signal = letters; | |
[signal subscribeNext:^(id x) { | |
NSLog(@"S1: %@", x); | |
}]; | |
[letters sendNext:@"A"]; | |
[letters sendNext:@"B"]; | |
[signal subscribeNext:^(id x) { | |
NSLog(@"S2: %@", x); | |
}]; | |
[letters sendNext:@"C"]; | |
} | |
- (void)testReplay { | |
RACSubject *letters = [RACReplaySubject subject]; | |
RACSignal *signal = letters; | |
[signal subscribeNext:^(id x) { | |
NSLog(@"S1: %@", x); | |
}]; | |
[letters sendNext:@"A"]; | |
[signal subscribeNext:^(id x) { | |
NSLog(@"S2: %@", x); | |
}]; | |
[letters sendNext:@"B"]; | |
[signal subscribeNext:^(id x) { | |
NSLog(@"S3: %@", x); | |
}]; | |
[letters sendNext:@"C"]; | |
} | |
- (void)testReplayLast { | |
RACSubject *letters = [RACSubject subject]; | |
RACSignal *signal = [letters replayLast]; | |
[signal subscribeNext:^(id x) { | |
NSLog(@"S1: %@", x); | |
}]; | |
[letters sendNext:@"A"]; | |
[signal subscribeNext:^(id x) { | |
NSLog(@"S2: %@", x); | |
}]; | |
[letters sendNext:@"B"]; | |
[signal subscribeNext:^(id x) { | |
NSLog(@"S3: %@", x); | |
}]; | |
[letters sendNext:@"C"]; | |
} | |
- (void)testReplayLazily { | |
RACSubject *letters = [RACSubject subject]; | |
RACSignal *signal = [letters replayLazily]; | |
[letters sendNext:@"A"]; | |
[signal subscribeNext:^(id x) { | |
NSLog(@"S1: %@", x); | |
}]; | |
[letters sendNext:@"B"]; | |
[signal subscribeNext:^(id x) { | |
NSLog(@"S2: %@", x); | |
}]; | |
[letters sendNext:@"C"]; | |
[signal subscribeNext:^(id x) { | |
NSLog(@"S3: %@", x); | |
}]; | |
[letters sendNext:@"D"]; | |
} | |
- (void)testZip { | |
RACSubject *letters = [RACSubject subject]; | |
RACSubject *numbers = [RACSubject subject]; | |
RACSignal *combined = | |
[RACSignal zip:@[ letters, numbers ] | |
reduce:^(NSString *letter, NSString *number) { | |
return [letter stringByAppendingString:number]; | |
}]; | |
// Outputs: A1 B2 C3 | |
[combined subscribeNext:^(id x) { | |
NSLog(@"%@", x); | |
}]; | |
[letters sendNext:@"A"]; | |
[letters sendNext:@"B"]; | |
[letters sendNext:@"C"]; | |
[numbers sendNext:@"1"]; | |
[numbers sendNext:@"2"]; | |
[numbers sendNext:@"3"]; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment