gpt4 book ai didi

swift - CocoaAction/带有 UIAlertController 的操作

转载 作者:行者123 更新时间:2023-11-30 13:07:57 24 4
gpt4 key购买 nike

我正在尝试使用 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 时,我知道出了问题,但我不明白如何解决。

我该如何纠正这个问题?我做错了什么?

最佳答案

问得好!感谢您发布代码。

所以你的代码从 requestChangeAddress 获取可观察值,但随后它会订阅它并将其添加到处置袋中。 Action类(class)实际上会为你处理这个问题,你只需归还一次性用品即可。

问题是您想要对操作上发送的值执行某些操作,而返回可观察值不允许您执行此操作。因此您需要包含对 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() }
})

使用doOn RxSwift 中的函数是一种在必要时将副作用注入(inject)可观察量的好方法,就像这里一样。

编辑:我在末尾添加了映射以修复编译器错误,因为工厂方法的返回类型是 Observable<Void> .

关于swift - CocoaAction/带有 UIAlertController 的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39110710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com