在不使用创建块的情况下返回RxSwift中的完整代码
问题描述:
我有一个Completable从简单函数返回。 这不是一个异步调用,所以我只需要返回根据条件一succcessful完成或错误(这里使用的Rx这样我就可以绑定到其他的Rx用途):在不使用创建块的情况下返回RxSwift中的完整代码
func exampleFunc() -> Completable {
if successful {
return Completable.just() // What to do here???
} else {
return Completable.error(SomeErrorType.someError)
}
}
错误的情况下工作很容易,但是在如何返回一个成功的可完成的(不需要.create()
它)方面存在阻塞。
我想我只需要使用Completable的.just()
或.never()
,但just
是需要一个参数,并never
似乎没有触发完成事件。
答
.empty()
是我一直在寻找的运营商!
原来,我在头脑中混合了.never()
和.empty()
的实现!
-
.never()
不排放项目和不终止 -
.empty()
不排放项目,但不正常结束
所以,上面这个例子是这样的:
func exampleFunc() -> Completable {
if successful {
return Completable.empty()
} else {
return Completable.error(SomeErrorType.someError)
}
}
这里是documentation空/投掷/从不操作员。
答
我会更倾向于做到以下几点:
func example() throws {
// do something
if !successful {
throw SomeErrorType.someError
}
}
然后以将其绑定到其他的Rx码,我只想用map
为:
myObservable.map { try example() }
但随后,在Completable上映射不起作用,因为只有在下一个事件中才会调用map的闭包。 :-(
我倾向于避免Completable因为这个原因,它似乎并没有与其他观测中发挥很好,我喜欢使用Observable<Void>
和完成之前发送一个空的事件...
东西像这样:
let chain = Observable<Void>.just()
let foo = chain.map { try example() }
foo.subscribe { event in print(event) }
好点,我想偶尔使用特点,所以我了解他们的使用情况和局限性更好 - 预告CONCAT和合并运营商已经加入到Completable在[V3.5.0](HTTPS:// github.com/ReactiveX/RxSwift/blob/master/CHANGELOG.md),希望随着更多操作员的加入,他们更容易与其他流程集成! – Yasir