2
func signup(_ username: String, password: String) -> Observable<Bool> {
    // this is also just a mock
    let signupResult = arc4random() % 5 == 0 ? false : true
    return Observable.just(signupResult)
        .concat(Observable.never())
        .throttle(0.4, scheduler: MainScheduler.instance)
        .take(1)
 }

RxSwiftにいくつかのコードが表示されますが、なぜ必要なのか理解できませんでしたconcat(Observable.never())

4

3 に答える 3

1

私はこれを自分で理解しているので、一粒の塩でそれを取ってください:)

  • Observable.just値を一度発行し、すぐに完了します。事実上まったく時間がかかりません。
  • .throttle(0.4, scheduler: MainScheduler.instance)シーケンスに時間を導入し、返す値を決定するのに 0.4 秒以上かかります。
  • concat(Observable.never())入力シーケンスを長時間実行するためthrottle、最初に何かする必要があります。

これreturn Observable.just(signupResult)で、その機能を実装するだけで十分です。残りは何の役に立つ?

他の 3 つの演算子は遅延を引き起こします。連結された Observable は終わりがないため、throttle少なくとも 0.4 秒待機して、最初のスロットルされた「チャンク」に対して発行する値を決定します。take(1)0.4 秒後に最初の値が発行されると、シーケンスが完了します。

私には、これは遅延応答を実装するための非常に骨の折れる方法のようです:)

于 2016-11-28T08:11:02.103 に答える