如何在 ReactiveCocoa 中将 NSError SignalProducer 转换为 NoError SignalProducer (Swift)

How to Convert NSError SignalProducer to NoError SignalProducer in ReactiveCocoa (Swift)

我有一个带有 MutableProperty<Bool> 的模型,我有一个 UIButton (ctaTopButton),当它被按下时应该翻转 属性,例如,点击时 true 变为 false 并且反之亦然。

我是这样设置的:

let producer = ctaTopButton.rac_signalForControlEvents(UIControlEvents.TouchUpInside).toSignalProducer()
    |> map {value in !self.model.enabled.value}


// model.enabled <~ producer  

我的问题的症结来自 rac_signalForControlEvents(...).toSignalProducer() returns 一个 SignalProducer<AnyObject?, NSError> 地图转换为 SignalProducer<Bool, NSError>

然而,中缀运算符 <~ 仅适用于 SignalProducer<Bool, NoError>,因此我需要以某种方式转换我的生产者。

我的问题是,如何降低错误?我知道有一个 promoteErrors 用于将 NoError 转换为 NSError。还有 mapError 虽然我不知道如何取回 NoError 的实例,因为它没有初始化程序。

对于这种情况,您可以使用 catch() 运算符,例如:

let producer = ctaTopButton.rac_signalForControlEvents(.TouchUpInside).toSignalProducer()
    |> map { value in !self.model.enabled.value }
    |> catch { _ in SignalProducer<Bool, NoError>.empty }