As a subclass of RACSequence, RACSignalSequence provides a method to initialize a RACSequence through RACSignal.
Complete test case Ad locum.
See the method in. m:
+ (RACSequence *)sequenceWithSignal:(RACSignal *)signal { RACSignalSequence *seq = [[self alloc] init]; RACReplaySubject *subject = [RACReplaySubject subject]; [signal subscribeNext:^(id value) { [subject sendNext:value]; } error:^(NSError *error) { [subject sendError:error]; } completed:^{ [subject sendCompleted]; }]; seq->_subject = subject; return seq; }
Method, initialize the RACSignalSequence RACReplaySubject object, and complete the subscription to the parameter signal. At this time, save the signal information through the RACReplaySubject. Therefore, all information of signal can be obtained through seq.
Test case:
- (void)test_sequenceWithSignal { RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { [subscriber sendNext:@"1"]; [subscriber sendCompleted]; return nil; }]; RACSequence *sequence = [RACSignalSequence sequenceWithSignal:signal]; NSLog(@"sequenceWithSignal -- %@", sequence); // Print log: /* 2018-08-17 17:08:33.093062+0800 TestRACSignalSequence[50146:18295650] sequenceWithSignal -- <RACSignalSequence: 0x60400023fe80>{ name = , values = ( 1 ) ... } */ }
- (id)head { id value = [self.subject firstOrDefault:self]; if (value == self) { return nil; } else { return value ?: NSNull.null; } }
Get the first value of the subject as the head value through firstOrDefault:.
Test case:
- (void)test_head { RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { [subscriber sendNext:@"1"]; [subscriber sendCompleted]; return nil; }]; RACSequence *sequence = [RACSignalSequence sequenceWithSignal:signal]; NSLog(@"head -- %@", sequence.head); // Print log: /* 2018-08-17 17:10:39.537477+0800 TestRACSignalSequence[50245:18302711] head -- 1 */ }
- (RACSequence *)tail { RACSequence *sequence = [self.class sequenceWithSignal:[self.subject skip:1]]; sequence.name = self.name; return sequence; }
Get the signal after removing the first value through skip:1, and generate a RACSequence object as the tail value through sequenceWithSignal:.
Test case:
- (void)test_tail { RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { [subscriber sendNext:@"1"]; [subscriber sendNext:@"2"]; [subscriber sendCompleted]; return nil; }]; RACSequence *sequence = [RACSignalSequence sequenceWithSignal:signal]; NSLog(@"tail -- %@", sequence.tail); // Print log: /* 2018-08-17 17:12:54.839794+0800 TestRACSignalSequence[50350:18310055] tail -- <RACSignalSequence: 0x60400023c820>{ name = , values = ( 2 ) ... } */ }
- (NSArray *)array { return self.subject.toArray; }
Get the array of signal values through toArray.
Test case:
- (void)test_array { RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { [subscriber sendNext:@"1"]; [subscriber sendNext:@"2"]; [subscriber sendCompleted]; return nil; }]; RACSequence *sequence = [RACSignalSequence sequenceWithSignal:signal]; NSLog(@"array -- %@", sequence.array); // Print log: /* 2018-08-17 17:17:30.637284+0800 TestRACSignalSequence[50521:18323552] array -- ( 1, 2 ) */ }
The format log method is no longer parsed.