如何映射
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冒泡到控制器,那么它可以在弹出对话框中显示错误吗?
答案 0 :(得分:2)
你问了3件事,所以让我们一个接一个地去:
- 从
醇>Void
转到Bool
假设您有foo: SignalProducer<Void, Error>
:
let bar: SignalProducer<Bool, Error> = foo.map { _ in true}
- 从
醇>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 }
- 如果NetworkError冒泡到控制器,那么它可以在弹出对话框中显示错误吗?
醇>
最终您必须将错误转换为可读的内容。 Controller(假设我们正在讨论UIViewController
),可以利用辅助实体将此错误转换为字符串或一对字符串(title + body)。如果你正在使用MVVM,那么ViewModel就会进行转换。