0

我该如何映射这个

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?
            }

另外,使用动作的最佳实践应该是什么?NetworkError 是否应该冒泡到控制器,以便它可以在弹出对话框中显示错误?

4

1 回答 1

2

你问了 3 件事,所以让我们一一进行:

  1. 从一个VoidBool

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

let bar: SignalProducer<Bool, Error> = foo.map { _ in true}
  1. 从一个NetworkError到一个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. NetworkError 是否应该冒泡到控制器,以便它可以在弹出对话框中显示错误?

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

于 2016-03-22T21:22:50.133 回答