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



我有一个带有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()返回一个地图转换为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 }

最新更新