2017-02-15 88 views
2

我正在使用Swift,ReactiveSwift和ReactiveCocoa。如何将单个SignalProducer绑定到多个UI组件?

假设我有一个单一的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是,只要我使用<~的操作者。因此,制片人被召唤两次。当生产者是网络请求时,这是不可取的。

回答

4

您可以将单独的MutableProperty绑定到SignalProducer,并将两个标签绑定到该MutableProperty。如果你不想让0显示出来,你可以使MutableProperty举行一个可选的诠释

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 
+0

谢谢 - 这工作得很好! – sdasdadas

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)) } 
} 
+0

谢谢!这也很有用! – sdasdadas

相关问题