ios – ReactiveCocoa 5,ReactiveSwift网络子请求处理和最佳实践

ios – ReactiveCocoa 5,ReactiveSwift网络子请求处理和最佳实践,第1张

概述我正在尝试找到最佳实践来处理从父请求获得的每个值的多个子请求.我正在尝试使用与此处相同的逻辑 – Reactive Cocoa 5 and ReactiveSwift network requests handling,但有一些问题. 我们拥有和需要的东西: 1.具有无限滚动处理程序的TableView(SVPullToRefresh) 2.每次调用处理程序时获取对象列表 3.从响应中为每个对象发 我正在尝试找到最佳实践来处理从父请求获得的每个值的多个子请求.我正在尝试使用与此处相同的逻辑 – Reactive Cocoa 5 and ReactiveSwift network requests handling,但有一些问题.

我们拥有和需要的东西:
1.具有无限滚动处理程序的tableVIEw(SVPullToRefresh)
2.每次调用处理程序时获取对象列表
3.从响应中为每个对象发送“子请求”

笔记:
1.一旦vIEwController关闭(deinit调用),所有请求(父子请求)都将被取消
2.我需要有能力随时取消父请求.这也应该取消所有子请求.

我现在有什么

我知道我在“无限处理程序”中做的是有点“胶带”,但我是ReactiveSwift的新手……

self.tableVIEw.addInfiniteScrollingWithActionHandler { [uNowned self] in    self.tempMutableProperty.value = true}self.tempMutableProperty.producer.skipNil().flatMap(.latest) { [uNowned self] tempValueThatIDontNeed in    return self.producerForParentRequest(offset: self.offset)        .take(during: self.reactive.lifetime)        .on(            // handlers for errors,completed,etc            value: { [uNowned self] items in                self.items.append(items)                self.tableVIEw.reloadData()                self.offset += items.count                // SEND REQUEST #2 FOR EACH ITEM            }    ).flatMapError { error in        return SignalProducer.empty    }}.observe(on: UIScheduler().start()

所以,正如你所看到的,我对tableVIEw进行了分页.我正在为每个页面提取对象列表.然后,对于响应中的每个项目,我需要使用请求#2获取其他信息.

流程和问题:
1.当然我想摆脱tempMutableProperty并以某种方式启动新的父请求而没有某种代理
2.每个子请求应该是独立的,这意味着我希望单独为每个子请求调用值/错误处理程序,而不是等待所有10个子请求,然后调用成功处理程序,收集所有10个响应.此外,某些特定子请求失败不应影响其他运行的子请求
3.用户可以在不等待整个请求过程完成的情况下更改其搜索请求.这意味着一旦用户更改了某些参数,我将清除所有项目,并且我需要在所有子请求中取消父请求并再次启动它.
4.除了#2之外,有时用户可以向下滚动以获取项目的新部分.这将意味着应该启动新的父请求,但来自父请求的先前响应的子请求应继续工作
5.所有请求都应该在self.deinit上取消,所以这一切都应该只在self.lifetime期间工作,但是我不确定放置这个参数的正确位置是什么

我不确定如果不将一次性/信号存储为自身的属性,这一切是否可行,所以如果子请求将以某种方式存储为属性,这不是问题.

感谢大家的帮助

解决方法 对于第1部分,我将添加一个扩展,将无限滚动 *** 作处理转换为Signal:

extension Reactive where Base: UItableVIEw {    public func infiniteScrollingSignal() -> Signal<VoID,NoError>    {        return Signal { [uNowned base = self.base] observer in            base.addInfiniteScrollingWithActionHandler  {                observer.send(value: ())            }            return Actiondisposable {                // Unsubscribe the infinite scrolling action handler here if necessary            }        }        .take(during: self.lifetime)    }}

然后,您可以将所有逻辑连接到self.tableVIEw.reactive.infiniteScrollingSignal()

总结

以上是内存溢出为你收集整理的ios – ReactiveCocoa 5,ReactiveSwift网络子请求处理和最佳实践全部内容,希望文章能够帮你解决ios – ReactiveCocoa 5,ReactiveSwift网络子请求处理和最佳实践所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1002261.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存