ios - 如何在 SignalProducer 上映射值和错误

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

我怎么映射这个

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

var saveAction: Action<AnyObject, Bool, NoError>

我对语法有点困惑

service.save()
            .observeOn(QueueScheduler.mainQueueScheduler)
            .map<Bool>( _ in true) // how to map void to bool
            .flatMapError {
                error in
                // how to map to a NoError?
            }

此外,使用 Action 的最佳实践应该是什么? NetworkError 是否应该冒泡到 Controller ,以便它可以在弹出对话框中显示错误?

最佳答案

你问了 3 件事,让我们一一说:

  1. Going from a Void to Bool

假设您有一个 foo: SignalProducer<Void, Error> :

let bar: SignalProducer<Bool, Error> = foo.map { _ in true}
  1. Going from a NetworkError to a NoError

这不直观,但您可以利用 Swift 的类型推断并执行如下操作:

let bar: SignalProducer<Void, NoError> =  foo.flatMapError { _ in SignalProducer.empty }

你的 func save() -> SignalProducer<Void, NetworkError>然后可以变成:

let save: SignalProducer<Void, NetworkError> = ...
let newSave: SignalProducer<Bool, NoError> = save.map {_ in true}.flatMapError  { _ in SignalProducer.empty }
  1. should the NetworkError bubble up to the controller so it can display the error in a Popup dialog?

最终您必须将错误转换为可读的内容。 Controller (假设我们正在谈论 UIViewController )可以利用辅助实体将此错误转换为一个字符串或一对字符串(标题 + 正文)。如果您使用的是 MVVM,即 ViewModel,是否会进行这种转换。

关于ios - 如何在 SignalProducer 上映射值和错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36159216/

相关文章:

ios - 使用 ReactiveCocoa 4 在 MVVM 中将信号从 View 传递到模型

ios - 代码错误 : linker command failed with exit code 1 googletoolboxmac

iphone - 升级iOS SDK后CorePlot链接器错误

macos - 将连续色井数据传递到第二个 View Controller

swift - combineLatest 的个别失败会怎样?

ios - 选择器 rac 发送异步请求没有已知的类方法

javascript - 禁用滚动,但保持缩放能力

ios - 快速更改为不同选项卡中的 View Controller ?

swift - 为什么我的 Core Audio 程序会出现爆裂声?

swift - 禁用/启用 NSMenu 项