【问题标题】:How can I convert "SignalProducer<Bool, NoError>" to "SignalProducer<Bool, NSError>" of ReactiveCocoa 3?如何将 ReactiveCocoa 3 的“SignalProducer<Bool, NoError>”转换为“SignalProducer<Bool, NSError>”?
【发布时间】:2015-08-19 01:57:20
【问题描述】:

我尝试创建一个 Action&lt;AnyObject?, Bool, NSError&gt; 的 ReactiveCocoa 3 实例。

let action: Action<AnyObject?, Bool, NSError> = Action { _ in
    if self.flag {
        return self.fooSignalProducer  // SignalProducer<Bool, NoError>
    } else {
        return self.barSignalProducer  // SignalProducer<Bool, NSError>
    }
}

此代码无法编译,出现错误'SignalProducer&lt;Bool, NoError&gt;' is not convertible to 'SignalProducer&lt;Bool, NSError&gt;'

如何将SignalProducer&lt;Bool, NoError&gt; 转换为SignalProducer&lt;Bool, NSError&gt;

【问题讨论】:

    标签: ios swift reactive-cocoa reactive-cocoa-3


    【解决方案1】:

    您可以使用mapError 运算符。大致如下:

    self.fooSignalProducer |> mapError { _ in NSError() }
    

    编辑:

    正如贾斯汀在下面指出的,promoteErrors 是专门为这种情况设计的:

    self.fooSignalProducer |> promoteErrors(NSError)
    

    【讨论】:

    • promoteErrors() 对于从NoError 升级的特定情况很有用。
    • @JustinSpahr-Summers 感谢您指出这一点!我已经修改了答案。
    猜你喜欢
    • 2015-09-02
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多