2

我正在使用 Swift、ReactiveSwift 和 ReactiveCocoa。

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

例如。

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

我目前面临的问题是,SignalProducer我一使用操作符就开始了<~。因此,生产者被调用了两次。当生产者是网络请求时,这是不可取的。

4

2 回答 2

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
于 2017-02-16T01:35:36.713 回答
2

我知道这是旧的并且已经回答了,但是使用属性的替代方法是使用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)) }
}
于 2017-05-04T18:48:09.210 回答