簡體   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