反应性可可:与信号或信号生产者结合之间的区别



绑定运算符 (<~( 采用BindingSource参数,SignalSignalProducer都符合协议

我希望绑定到生产者的 UI 元素不会"接收事件",直到以某种方式启动生产者,但情况似乎并非如此

let text = MutableProperty("abc")
myLabel1.reactive.text <~ text.signal
myLabel2.reactive.text <~ text.producer
text.value = "def"

导致两个标签更新。

这是有意的行为还是我误解了什么?

这是

预期行为。在<~的实现中可以看到显式调用start(并且生成者的处置与绑定目标的生存期相关联(。

[编辑]

澄清一下,以你想象的方式将生产者本身绑定到标签上没有多大意义。如果多次调用start以产生多个信号会发生什么?标签是从第一个信号、最新信号还是所有信号合并在一起获取值?没有直观的方法可以做到这一点。

当您调用绑定运算符 <~ 时,生产者会立即启动。

绑定到信号和信号生产者之间的主要区别在于,信号生产者可以在启动时立即发送值。

删除示例的最后一行,您可以看到差异:

myLabel1.text = ""
myLabel2.text = ""
let text = MutableProperty("abc")
myLabel1.reactive.text <~ text.signal // no change
myLabel2.reactive.text <~ text.producer // changed to "abc"

因为text.producer在您启动它时立即发送其当前值"abc",而text.signal只发送新更新的值。

因此,当您绑定到MutableProperty时,在大多数情况下,您应该绑定到属性的生产者。

相关内容

  • 没有找到相关文章

最新更新