代码之家  ›  专栏  ›  技术社区  ›  Yasir

在RxSwift中返回一个completable,而不使用create块

  •  9
  • Yasir  · 技术社区  · 7 年前

    我有一个从简单函数返回的完全表。

    func exampleFunc() -> Completable {
        if successful {
            return Completable.just() // What to do here???
        } else {
            return Completable.error(SomeErrorType.someError)
        }
    }
    

    这个错误案例很容易处理,但我不知道如何返回一个成功的completable(无需 .create() it)。

    .just() .never() 但是 just never 似乎不会触发完成事件。

    2 回复  |  直到 7 年前
        1
  •  32
  •   Yasir    7 年前

    .empty() 就是我要找的接线员!

    事实证明,我混淆了 .never() 在我脑海里!

    • 不发射任何项目和 没有
    • 不发射任何项目,但 正常终止

    因此,上面的示例代码是这样工作的:

    func exampleFunc() -> Completable {
        if successful {
            return Completable.empty()
        } else {
            return Completable.error(SomeErrorType.someError)
        }
    }
    

    这是 documentation 在空/抛出/从不运算符上。

        2
  •  0
  •   Daniel T.    7 年前

    func example() throws {
        // do something
        if !successful {
            throw SomeErrorType.someError
        }
    } 
    

    然后,为了将其与其他接收代码绑定,我只需要使用 map

    myObservable.map { try example() }
    

    但是,在完全表上映射不起作用,因为映射的闭包只在接下来的事件中被调用-(

    正是因为这个原因,我倾向于避免使用Completable,因为它似乎与其他观察值不太匹配。我更喜欢使用 Observable<Void>

    类似这样:

    let chain = Observable<Void>.just()
    let foo = chain.map { try example() }
    foo.subscribe { event in print(event) }