我有一个带有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 }