簡體   English   中英

在RxSwift中嵌套訂閱調用

[英]Nesting subscribe calls in RxSwift

我已經開始學習RxSwift,但無法理解一些時刻。 我必須在執行請求后創建一個按鈕。 像這樣:

textField.rx.text
    .flatMapLatest { text in
        return performURLRequest(text)
    }
    .subscribe(onNext: { request in

        // Create a button
        let button = UIButton()
        button.rx.tap
            .subscribe({ _ in

                // Action

            }).disposed(by: self.disposeBag)
        self.view.addSubview(button)
    })
    .disposed(by: disposeBag)

如何避免嵌套訂閱調用? 因為這個代碼味道。

您可以使用flatMap避免嵌套訂閱,例如(orEmpty是可選的)

    textField.rx.text.orEmpty
        .flatMapLatest { text in
            return performURLRequest(text)
        }
        .flatMap { request -> Observable<Void> in
            // Create a button
            let button = UIButton()
            self.view.addSubview(button)
            return button.rx.tap.asObservable()
        }
        .subscribe({ _ in

            // Action

        }).disposed(by: self.disposeBag)

我可以確認嵌套訂閱是禁止的。

您可以在pipe使用switchMap運算符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM