2017-07-14 1 views
2

単純な関数からCompletableが返されました。 これは非同期呼び出しではありませんので、私はちょうど(私は他のRxの用途に結びつけることができますので、ここでのRxを使用して)条件に応じて、succcessful完了やエラーを返す必要があります。作成ブロックを使用せずに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完了イベントをトリガしていないようです。

答えて

3

.empty()私が探していた演算子です!

私の頭には.never().empty()の実装が混在していました。

  • .never()にはアイテムを発していないと
  • .empty()は何のアイテムを発していない終了しませんが、は正常に終了し

だから、例のコードは、上記のように動作しない:

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

こちらはです210は空/スロー/決してオペレーターではありません。

0

私は、次の操作を実行する傾向になります:、その後、

myObservable.map { try example() } 

しかし:その後、他のRxコードにそれを結ぶために、私はちょうどのようにmapを使用し

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

Mapのクロージャーは次のイベントでのみ呼び出されるため、Completable上のマッピングは機能しません。 :-(

私は、まさにこの理由のためにCompletableを避ける傾向にある、他の観測とよく遊ぶように思えません。私はObservable<Void>を使用して完成...

何かの前に空のイベントを送信することを好みますこのように: - ://

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

良かった点、私は時々、私はより自分のユースケースや限界を理解して特性を使用しようとしています注目連結をして演算子をマージするには、[v3.5.0](HTTPSでCompletableに追加されましたgithub.com/ReactiveX/RxSwift/blob/master/CHANGELOG.md)より多くの演算子が追加されるので、他のフローとの統合が容易になることを期待してください! – Yasir

関連する問題