2

绑定运算符 (<~) 接受一个BindingSource参数,两者都Signal符合SignalProducer协议

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

IE

let text = MutableProperty("abc")

myLabel1.reactive.text <~ text.signal
myLabel2.reactive.text <~ text.producer

text.value = "def"

导致两个标签都更新。

这是预期的行为还是我误解了什么?

4

2 回答 2

2

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

[编辑]

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

于 2017-05-24T21:06:55.217 回答
2

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

绑定到 Signal 和 SignalProducer 之间的主要区别在于 SignalProducer 可以在启动时立即发送值。

删除示例的最后一行,您可以看到不同之处:

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

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

于 2017-05-31T02:22:05.623 回答