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

时间:2017-02-15 14:34:27

标签: ios swift reactive-cocoa reactive-swift

我正在使用Swift,ReactiveSwift和ReactiveCocoa。

假设我有一个SignalProducer,有多种方法可以在生成Event时更新多个UI组件?

例如

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

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

2 个答案:

答案 0 :(得分:4)

你可以有一个单独的MutableProperty绑定到SignalProducer,并让两个标签绑定到MutableProperty。如果你不想显示0,你可以让MutableProperty保持一个可选的Int

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

答案 1 :(得分:1)

我知道这已经过时且已经回答,但使用属性的另一种方法是使用startWithSignal

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