比方說,我有一個返回SignalProducer<AnyObject?, NSError>
的函數,我想將生產者綁定到多個MutableProperty<String>
。所以,這樣的事情:在ReactiveCocoa 3和ReactiveCocoa中進行多播4
let foo = SignalProducer<AnyObject?, NSError>(value: nil)
let someProperty1 = MutableProperty<String>("")
let someProperty2 = MutableProperty<String>("")
someProperty1 <~ foo
.flatMapError { _ in
SignalProducer<AnyObject?, NoError>.empty
}
.map { _ in
return "test"
}
// someProperty2 <~ foo etc...
爲了避免我的函數(例如,一些網絡的東西)被多次運行,我需要使用多播。據我所知,從CHANGELOG,startWithSignal
是用於此的運營商。然而,我似乎無法弄清楚如何以聲明的方式做到這一點。
所以,一種方法可以使在startWithSignal
關閉的結合:
foo.startWithSignal { signal, disposable in
someProperty1 <~ signal
.map { _ in
return "test"
}
// someProperty2 <~ signal etc...
}
然而,這顯然會失敗,因爲我們需要擺脫NSError
部分。因爲我們提供了Signal
(與SignalProducer
相反),所以我們不能使用flatMapError
(在RAC4中爲RAC4,catch
)。我不明白mapError
可以爲我們做這個嗎?最後,我甚至不確定這是在RAC3/RAC4中處理多播的正確方法嗎?
任何幫助,非常感謝。
這看起來正是我所尋找的。但是,我不確定如何組播並能夠轉發錯誤。你能詳細解釋一下嗎? –
我在這裏解釋了一點:http://stackoverflow.com/a/34010499/401024。 – NachoSoto
對不起,我不太清楚,但我希望類型保持爲'SignalProducer'。來自這個答案的例子將其映射到「NoError」中,鏈接中的描述將包含「Next」值中的任何錯誤。是否有可能實現我想要的? –