HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – ReactiveCocoa 5,ReactiveSwift网络子请求处理和最佳实践大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试找到最佳实践来处理从父请求获得的每个值的多个子请求.我正在尝试使用与此处相同的逻辑 – 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网络子请求处理和最佳实践所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。