繁体   English   中英

使用带有RxSwift的驱动程序进行订阅

[英]Subscription using Driver with RxSwift

我对RxSwift及其与Driver的使用有疑问。

我只尝试了这种模式

        loginButton.rx_tap
             .doOn({[unowned self] _ in
                 self.loginButton.enabled = false
             })
             .debug()
             .flatMap({[unowned self] in self.loginViewModel.login() })
             .subscribeNext({ [weak self] login  in
               // Custom code
        })
        .addDisposableTo(disposeBag)

因此,一切都从轻按按钮开始...但是如果我可以尝试以这种方式开始:

    let contractCode = Variable(contractDetail.contractCode).asDriver()
    viewModel = viewModel(provider: apiProvider! as! RxMoyaProvider<APIProvider>, contractCode: contractCode)
    _ = viewModel?.getStatus()
    .subscribeNext({ data in
        print(data)
        guard data?.result == 1 else {
            // ALERT
            return;
        }
        // Custom code
    })

其中contractDetail.contractCode是字符串,而viewModel中的contractCode是驱动程序。 它订阅它,但是不会在onNext上触发,因此subscribeNext不会被调用。 你能帮助我吗? 这种方法有什么问题? 谢谢

您的意思是这部分没有在下一个触发: Variable(contractDetail.contractCode).asDriver()吗? 如果是,如何更改contractCode的值? 如果您这样做:

// binding
Variable(contractDetail.contractCode).asDriver()./* more binding */
// change value (contractCode is a simple string)
contractDetail.contractCode = "new value of contract"

这将不起作用,因为Variable不遵守给定值,因此您必须更改实际Variable的value属性:

// create variable
let variable = Variable(contractDetail.contractCode)
// binding
variable.asDriver()./* more binding */
// change value of variable
variable.value = "new value of contract"

在这种情况下,新值将在该变量的订阅者上引起onNext事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM