如何将单个 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=])) }
}
我正在使用 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=])) }
}