2016-08-23 8 views
0

私はAction/CocoaActionライブラリを使用しようとしています。 今の主な使い方はUIAlertControllerを表示することです.UIAlertActionボタンをタップすると、私のviewModel(Observableを返すchangeAddress)で定義された関数を呼び出さなければなりません。CocoaAction/Action with UIAlertController

let ac = CocoaAction(workFactory: {[unowned self] _ in 
    self.viewModel!.requestChangeAddress() 
     .subscribeNext({ [unowned self] data in 
      if let response = data?.result 
      { 
       self.showResultOperation(response) 
      } 
     }) 
     .addDisposableTo(self.disposeBag) 
     return .empty() 
    }) 

let OKAction = UIAlertAction.Action("OK", style: .Default) 
OKAction.rx_action = ac 

しかし残念ながら、それは動作しません:この

私の理解では次のようになります。 workFactoryクロージャは正しく呼び出されますが、サブスクリプションは有効になりません。私が帰って何かが間違っていることが分かっているが、私は解決する方法を理解できない。

これを修正するにはどうすればよいですか?私は間違っているの?

ありがとうございました。

答えて

0

大きな質問です!コードを投稿していただきありがとうございます。

あなたのコードはobservableをrequestChangeAddressから取得していますが、購読して、処分バッグに追加しています。 Actionクラスは、実際にあなたのためにそれを世話するつもりです、あなたは一回だけ返す必要があります。

問題は、アクションで送信された値を使って何かを行いたいということです。オブザーバブルを返すことで、そのようにすることはできません。したがって、doOnNextへの呼び出しをオブザーバーチェーンに含める必要があります。ここではそれがどのように見えるかです:それはここにあるようRxSwiftでdoOn機能を使用して

let ac = CocoaAction(workFactory: {[unowned self] _ in 
    return self.viewModel! 
     .requestChangeAddress() 
     .doOnNext({ [unowned self] data in 
      if let response = data?.result 
      { 
       self.showResultOperation(response) 
      } 
     }) 
     .map { _ in Void() } 
}) 

は、必要に応じて、あなたの観測に副作用を注入するための素晴らしい方法です。

EDIT:ファクトリメソッドの戻り値の型がObservable<Void>であるため、コンパイルエラーを修正するために最後にマップを追加しました。

+0

ありがとうございましたが、最初の行でコンパイラがこのエラーを表示します: "タイプ '(_) - >オブザーバブル

'を '_ - >オブザーバブルタイプの予想される引数に変換できません" – jerrygdm

+0

Ah 、 右!私は私の答えを更新します。 –

+0

ありがとう...ほとんどすべての罰金。私はこれに関連する問題があります... okをタップした後、またはalertContollerでキャンセルした後、ボタンは無効になっているように見えます。どうすれば問題を解決できますか? – jerrygdm

関連する問題