7

(也在GitHub 上向 ReactiveCocoa 人员开放评论。)

我正在一个非常简单的RACTest(源代码在 GitHub 上)应用程序中尝试 ReactiveCocoa,试图通过实际使用它来巩固我的理论理解。

我有一个RACChannel,我RAC(),提供了一个ed l-value 和我指定为参数的任何东西之间的双向绑定RACChannel

我的用法如下:

// Map the ticker's accumulationEnabled property to self.paused.
RAC(self, paused) = [RACChannelTo(_ticker, accumulateEnabled) deliverOn:[RACScheduler mainThreadScheduler]];

我看到变化从一个方向流动,从_ticker.accumulateEnabledto self.paused,但变化 toself.paused没有流回_ticker

我误解了RACChannel吗?它有什么用,这不是预期的用途吗?

4

1 回答 1

10

我误解了如何使用RACChannel. RACChannelTo在作业的两侧使用按预期工作:

RACChannelTo(self, paused) = RACChannelTo(_ticker, accumulateEnabled);

更改的主线程交付self.paused有点复杂,但并不可怕:

RACChannelTerminal *accumulateChannel = RACChannelTo(_ticker, accumulateEnabled);
RAC(self, paused) = [accumulateChannel deliverOn:RACScheduler.mainThreadScheduler];
[[RACObserve(self, paused) skip:1] subscribe:accumulateChannel];

(我仍在试图理解为什么skip:1是必要的,但没有它,RAC 会破坏堆栈,所以我根据GitHub 问题保留它。)

于 2013-12-21T01:03:48.767 回答