将UISwitch的状态绑定到具有ReactiveCocoa的模型

我试图使用ReactiveCocoa将UISwitch的on状态绑定到我的模型中的布尔属性。 我开始时:

RACChannelTo(self.switch, on, @NO) = RACChannelTo(self.model, toggle, @NO); 

这就是我将其他视图绑定到模型的其他部分的方式,遗憾的是它似乎没有为UISwitch做任何事情。 模型的状态不会影响开关,反之亦然。

所以我尝试过:

 RACChannelTo(self.model, toggle, @NO) = [self.switch rac_newOnChannel]; 

这似乎工作正常,但我必须事先手动设置开关的状态。 所以,现在我有:

 self.switch.on = self.model.toggle; RACChannelTo(self.model, toggle, @NO) = [self.switch rac_newOnChannel]; 

同样,这可行,但与使用ReactiveCocoa与其他控件相比,它似乎非常不优雅。

有没有更好的方法来做到这一点?

您可以直接使用-rac_newOnChannel而不是通道来on交换机。 这是因为不能保证以符合KVO标准的方式修改on 。 使用通道挂钩进入交换机的UIControlEventValueChanged事件。

获得如下行为:

 RACChannelTo(self.switch, on, @NO) = RACChannelTo(self.model, toggle, @NO); 

如果交换机以模型中的值开头,您可以手动执行通道连接:

 RACChannelTerminal *switchTerminal = [self.switch rac_newOnChannel]; RACChannelTerminal *modelTerminal = RACChannelTo(self.model, toggle, @NO); [modelTerminal subscribe:switchTerminal]; [[switchTerminal skip:1] subscribe:modelTerminal];