使用带RxSwift的驱动程序订阅

时间:2016-08-10 18:14:24

标签: ios swift rx-swift

我对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是String,则viewModel中的contractCode是Driver。 它订阅它但不会触发onNext,因此不会调用subscribeNext。 你能帮助我吗?这种方法有什么问题? 感谢

1 个答案:

答案 0 :(得分:2)

你的意思是这部分没有触发下一个: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不会观察给定值,所以你必须改变实际变量的value属性:

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

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