我正在使用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
运算符一旦启动就会启动<~
。因此,生产者被召唤两次。当生产者是网络请求时,这是不可取的。
答案 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)) }
}