123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- //
- // UIControl+RACSignalSupportPrivate.m
- // ReactiveObjC
- //
- // Created by Uri Baghin on 06/08/2013.
- // Copyright (c) 2013 GitHub, Inc. All rights reserved.
- //
- #import "UIControl+RACSignalSupportPrivate.h"
- #import "NSObject+RACDeallocating.h"
- #import "NSObject+RACLifting.h"
- #import "RACChannel.h"
- #import "RACCompoundDisposable.h"
- #import "RACDisposable.h"
- #import "RACSignal+Operations.h"
- #import "UIControl+RACSignalSupport.h"
- @implementation UIControl (RACSignalSupportPrivate)
- - (RACChannelTerminal *)rac_channelForControlEvents:(UIControlEvents)controlEvents key:(NSString *)key nilValue:(id)nilValue {
- NSCParameterAssert(key.length > 0);
- key = [key copy];
- RACChannel *channel = [[RACChannel alloc] init];
- [self.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{
- [channel.followingTerminal sendCompleted];
- }]];
- RACSignal *eventSignal = [[[self
- rac_signalForControlEvents:controlEvents]
- mapReplace:key]
- takeUntil:[[channel.followingTerminal
- ignoreValues]
- catchTo:RACSignal.empty]];
- [[self
- rac_liftSelector:@selector(valueForKey:) withSignals:eventSignal, nil]
- subscribe:channel.followingTerminal];
- RACSignal *valuesSignal = [channel.followingTerminal
- map:^(id value) {
- return value ?: nilValue;
- }];
- [self rac_liftSelector:@selector(setValue:forKey:) withSignals:valuesSignal, [RACSignal return:key], nil];
- return channel.leadingTerminal;
- }
- @end
|