2016-08-10 23 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はドライバです。 それはそれを購読しますが、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イベントを引き起こします。

関連する問題