0

Action / CocoaAction ライブラリを使用しようとしています。現在の主な使用法は、UIAlertController を表示することです。UIAlertAction ボタンがタップされると、viewModel で定義された関数 (Observable を返す changeAddress) を呼び出す必要があります。

これについての私の理解は次のとおりです。

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 クロージャーは正しく呼び出されますが、サブスクリプションは有効になりません。.empty を返すときに何か問題があることはわかっていますが、解決方法がわかりません。

どうすればこれを修正できますか? 私が間違っていることは何ですか?

4

1 に答える 1

0

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

したがって、コードは からオブザーバブルを取得していますrequestChangeAddressが、それをサブスクライブして破棄バッグに追加しています。クラスは実際にそれActionを処理します。使い捨てのものを返すだけです。

問題は、アクションで送信された値で何かをしたいのに、オブザーバブルを返すとそれができないことです。doOnNextしたがって、オブザーバー チェーンに呼び出しを含める必要があります。これは次のようになります。

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() }
})

ここにあるように、RxSwift で関数を使用doOnすることは、必要に応じてオブザーバブルに副作用を挿入する優れた方法です。

編集: ファクトリ メソッドからの戻り値の型がObservable<Void>.

于 2016-08-23T21:23:29.763 に答える