如何将单个 SignalProducer 绑定到多个 UI 组件?

How do I bind a single SignalProducer to multiple UI components?

我正在使用 Swift、ReactiveSwift 和 ReactiveCocoa。

假设我有一个 SignalProducer,有没有办法让多个 UI 组件在生成 Event 时更新?

例如

let sp = SignalProducer<Int, NoError> = // ...
label1.reactive.text <~ sp.map { String([=11=]) }
label2.reactive.text <~ sp.map { "You entered \(String([=11=])) }

我目前面临的问题是,一旦我使用 <~ 运算符,SignalProducer 就会启动。因此,生产者被调用了两次。当生产者是网络请求时,这是不可取的。

您可以将一个单独的 MutableProperty 绑定到 SignalProducer,并将两个标签绑定到该 MutableProperty。如果你不希望 0 出现,你可以让 MutableProperty 持有一个可选的 Int

let sp = SignalProducer<Int, NoError> = // ...
let result = MutableProperty(0)
label1.reactive.text <~ result.map { String([=10=]) }
label2.reactive.text <~ result.map { "You entered \(String([=10=])) }
result <~ sp

我知道这是旧的并且已经回答了,但是使用 属性 的替代方法是使用 startWithSignal:

let sp: SignalProducer<Int, NoError> = // ...
sp.startWithSignal { (signal, _) in
    label1.reactive.text <~ signal.map { String([=10=]) }
    label2.reactive.text <~ signal.map { "You entered \(String([=10=])) }
}