ReactiveCocoa 学习笔记二十一(RACPassthroughSubscriber & RACSubscriptingAssignmentTrampoline)

本文深入探讨了ReactiveCocoa框架中RACPassthroughSubscriber与RACSubscriptingAssignmentTrampoline类的作用及使用方法。RACPassthroughSubscriber作为信号流的中转站,负责将信号转发给真正的订阅者;而RACSubscriptingAssignmentTrampoline则用于将信号流绑定到对象的特定属性上,简化了属性赋值的过程。

RACPassthroughSubscriber

RACPassthroughSubscriber 是 ReactiveCocoa 框架中的一个内部类,其遵循 <RACSubscriber> 协议,所以可以作为一个订阅者订阅信号流。但是,其只是作为一个中转,会将接收到的信号量转发为真正的订阅者。

- (instancetype)initWithSubscriber:(id<RACSubscriber>)subscriber signal:(RACSignal *)signal disposable:(RACCompoundDisposable *)disposable;
  • subscriber 是真正的订阅者,不能为空
  • signal 是传递信号量的信号流
  • disposable 若是已经清理,那么该类将不再转发信号量

RACSubscriptingAssignmentTrampoline

RACSubscriptingAssignmentTrampoline 类可以为指定对象的指定属性绑定一个信号流,每当信号流传递信号量时,便为该属性赋值。

该类提供了一个初始化方法,含有两个参数,一个是指定的对象,一个是当传递的信号量是 nil 时,属性会设置的值。

- (nullable instancetype)initWithTarget:(nullable id)target nilValue:(nullable id)nilValue;

但是,不必直接使用这个类,框架中提供了一个宏,十分方便。

#define RAC(TARGET, ...) \
    metamacro_if_eq(1, metamacro_argcount(__VA_ARGS__)) \
        (RAC_(TARGET, __VA_ARGS__, nil)) \
        (RAC_(TARGET, __VA_ARGS__))


#define RAC_(TARGET, KEYPATH, NILVALUE) \
    [[RACSubscriptingAssignmentTrampoline alloc] initWithTarget:(TARGET) nilValue:(NILVALUE)][@keypath(TARGET, KEYPATH)]

使用 RAC(TARGET, …) 宏,该宏可以提供2个或3个参数,使用方法如下例子:

RAC(self, objectProperty) = objectSignal;
RAC(self, stringProperty, @"foobar") = stringSignal;
RAC(self, integerProperty, @42) = integerSignal;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值