Ios 如何在SignalProducer上映射值和错误

Ios 如何在SignalProducer上映射值和错误,ios,swift,reactive-cocoa,reactive-cocoa-3,reactive-cocoa-4,Ios,Swift,Reactive Cocoa,Reactive Cocoa 3,Reactive Cocoa 4,如何绘制此地图 func save() -> SignalProducer<Void, NetworkError> func save()->SignalProducer 到 var saveAction:Action 我对语法有点困惑 service.save() .observeOn(QueueScheduler.mainQueueScheduler) .map<Bool>( _ in true) // ho

如何绘制此地图

func save() -> SignalProducer<Void, NetworkError>
func save()->SignalProducer

var saveAction:Action
我对语法有点困惑

service.save()
            .observeOn(QueueScheduler.mainQueueScheduler)
            .map<Bool>( _ in true) // how to map void to bool
            .flatMapError {
                error in
                // how to map to a NoError?
            }
service.save()
.observeOn(QueueScheduler.mainQueueScheduler)
.map(u为true)//如何将void映射到bool
.flatMapError{
错误
//如何映射到无错误?
}
另外,在使用动作时,最佳实践应该是什么?
网络错误是否应该出现在控制器上,以便它可以在弹出的对话框中显示错误?

您问了三件事,让我们逐一进行:

  • Void
    Bool
  • 假设您有一个
    foo:SignalProducer

    然后,您的
    func save()->SignalProducer
    可能会变成:

    let save: SignalProducer<Void, NetworkError> = ...
    let newSave: SignalProducer<Bool, NoError> = save.map {_ in true}.flatMapError  { _ in SignalProducer.empty }
    
    let save:SignalProducer=。。。
    让newSave:SignalProducer=save.map{intrue}.flatMapError{insignalproducer.empty}
    
  • NetworkError是否应该出现在控制器上,以便在弹出对话框中显示错误

  • 最终,您必须将错误转换为可读的内容。控制器(假设我们讨论的是
    UIViewController
    )可以利用辅助实体将此错误转换为一个字符串或一对字符串(title+body)。如果您使用的是MVVM,即ViewModel,那么您会考虑这种转换。

    您会问三件事,所以让我们逐一进行:

  • Void
    Bool
  • 假设您有一个
    foo:SignalProducer

    然后,您的
    func save()->SignalProducer
    可能会变成:

    let save: SignalProducer<Void, NetworkError> = ...
    let newSave: SignalProducer<Bool, NoError> = save.map {_ in true}.flatMapError  { _ in SignalProducer.empty }
    
    let save:SignalProducer=。。。
    让newSave:SignalProducer=save.map{intrue}.flatMapError{insignalproducer.empty}
    
  • NetworkError是否应该出现在控制器上,以便在弹出对话框中显示错误
  • 最终,您必须将错误转换为可读的内容。控制器(假设我们讨论的是
    UIViewController
    )可以利用辅助实体将此错误转换为一个字符串或一对字符串(title+body)。如果您使用的是MVVM,ViewModel,那么您可能需要进行这种转换

    let bar: SignalProducer<Void, NoError> =  foo.flatMapError { _ in SignalProducer.empty }
    
    let save: SignalProducer<Void, NetworkError> = ...
    let newSave: SignalProducer<Bool, NoError> = save.map {_ in true}.flatMapError  { _ in SignalProducer.empty }