2016-08-10 47 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事件。