我该如何映射这个
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?
}
另外,使用操作的最佳实践应该是什么?网络错误是否应该冒泡到控制器,以便它可以在弹出对话框中显示错误?
你问了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 }
- 网络错误是否应该冒泡到控制器,以便它可以在弹出对话框中显示错误?
最终,您必须将错误转换为可读的内容。控制器(假设我们正在谈论UIViewController
),可以利用辅助实体将此错误转换为字符串或一对字符串(标题+正文)。如果您使用的是 MVVM,则视图模型会进行转换。