如何将"SignalProducer <Bool,NoError>"转换为ReactiveCocoa 3的"SignalProducer <Bool,NSError>"?

r.i*_*ita 5 ios reactive-cocoa swift reactive-cocoa-3

我尝试创建Action<AnyObject?, Bool, NSError>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>
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码无法编译错误'SignalProducer<Bool, NoError>' is not convertible to 'SignalProducer<Bool, NSError>'.

我怎样才能转换SignalProducer<Bool, NoError>SignalProducer<Bool, NSError>

Sim*_*mon 9

您可以使用该mapError运算符.有点像:

self.fooSignalProducer |> mapError { _ in NSError() }
Run Code Online (Sandbox Code Playgroud)

编辑:

正如Justin在下面指出的那样,promoteErrors是专门针对这种情况设计的:

self.fooSignalProducer |> promoteErrors(NSError)
Run Code Online (Sandbox Code Playgroud)

  • `promoteErrors()`对于从NoError升级的特定情况很有用. (4认同)