2016-08-10 46 views
0

我有一个关于RxSwift和使用驱动程序的问题。使用驱动程序与RxSwift订阅

我对这种模式

 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不会被调用。 你能帮我吗?这种方法有什么问题? 谢谢

回答

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" 

它不会工作,因为变量不遵守给定值,所以你必须改变实际变量的值属性:

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

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