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