我正在尝试使用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闭包,但订阅不会生效。当我回来时,我知道出了什么问题。但是我无法理解如何解决。
我该如何纠正?我做错了什么?
答案 0 :(得分:0)
所以你的代码从requestChangeAddress
获得了observable,但随后它订阅了它并将它添加到了一个dispose包中。 Action
课程实际上是要为你照顾,你只需要退还一次性用品。
问题是你想对动作发送的值做一些事情,并且返回observable不会让你这样做。因此,您需要在观察者链中包含对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>
。