在RxSwift中嵌套订阅呼叫

时间:2018-08-02 07:05:17

标签: ios swift nested rx-swift

我已经开始学习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)

如何避免嵌套订阅电话?因为这段代码的味道。

2 个答案:

答案 0 :(得分:3)

您可以使用flatMap来避免嵌套订阅,例如(或Empty是可选的)

    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)

答案 1 :(得分:0)

我可以确认嵌套订阅是不可以的。

您可以在switchMap中使用pipe运算符。