RacChannel

RacChannel ---RacChannelTerminal+++UIControl
RacKVOChannel ------RACChannelTo
RacObserve -------RacDelegateProxy

1, RACKVOChannel
双向绑定+继承于RACChannel

代理人模式;实现KVO;
底层还是依赖于RACKVO

    [RACKVOProxy.sharedProxy addObserver:self forContext:(__bridge void *)self];
    [strongTarget addObserver:RACKVOProxy.sharedProxy forKeyPath:self.keyPath options:options context:(__bridge void *)self];



RACChannelTo


 [[RACKVOChannel alloc] initWithTarget:(TARGET) keyPath:@keypath(TARGET, KEYPATH) nilValue:(NILVALUE)][@keypath(RACKVOChannel.new, followingTerminal)]

管道------ A[0] = 111; ///实现中括号下标操作符

- (RACChannelTerminal *)objectForKeyedSubscript:(NSString *)key {
    NSCParameterAssert(key != nil);

    RACChannelTerminal *terminal = [self valueForKey:key];
    NSCAssert([terminal isKindOfClass:RACChannelTerminal.class], @"Key \"%@\" does not identify a channel terminal", key);

    return terminal;
}

- (void)setObject:(RACChannelTerminal *)otherTerminal forKeyedSubscript:(NSString *)key {
    NSCParameterAssert(otherTerminal != nil);

    RACChannelTerminal *selfTerminal = [self objectForKeyedSubscript:key];
    [otherTerminal subscribe:selfTerminal];
    [[selfTerminal skip:1] subscribe:otherTerminal];
}

2,
使用KVC实现+ RACChannel

- (RACChannelTerminal *)rac_channelForControlEvents:(UIControlEvents)controlEvents key:(NSString *)key nilValue:(nullable id)nilValue;



    [[self
        rac_liftSelector:@selector(valueForKey:) withSignals:eventSignal, nil]
        subscribe:channel.followingTerminal];


    [self rac_liftSelector:@selector(setValue:forKey:) withSignals:valuesSignal, [RACSignal return:key], nil];





©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • RACChannel可以被看成是一个由两个并行工作的signal组成的双向连接。例如,当连接一个view和一个mo...
    解放者莫雷尔阅读 1,539评论 0 0
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,212评论 30 472
  • 1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch...
    阳光的大男孩儿阅读 5,042评论 0 13
  • 题意:给定n个二元数,选取n-k个二元组合,使得sigma(a[i])/sigma(b[i])最大.思路:所以这就...
    Anxdada阅读 390评论 0 0
  • 从大学毕业后,身边的人陆续的结婚、生小孩了。去年算是夸张的一年,不算我的同学、朋友,还是有八九家亲戚的孩子结婚。如...
    爱发呆的菇凉阅读 210评论 0 0