Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了RxSwift:链接几个动作大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

让我们假设我们有一个AnObject实例数组,需要执行以下一系列操作: >通过单独的调用将对象发送到后端 >在步骤1完成后,将该数组批量存储到DB中 >在第2步完成后,对每个项目进行额外处理 并且我们只想在执行所有这些步骤后(或者出现错误)才接收信号.通过RxSwift实现这一目标的正确方法是什么?它实际上可行吗? 请在下面找到我的原型功能.不幸的是我没有提供有效的链接代码示例,所以没有什么可以演
让我们假设我们有@L_607_0@AnObject实例数组,需要执行以下一系列操作:

>通过单独的调用将对象发送到后端
>在步骤1完成后,将该数组批量存储到DB中
>在第2步完成后,对每个项目进行额外处理

并且我们只想在执行所有这些步骤后(或者出现错误)才接收信号.通过RxSwift实现这一目标的正确方法是什么?它实际上可行吗?

请在下面找到我的原型功能.不幸的是我没有提供有效的链接代码示例,所以没有什么可以演示的.

func makeAPIrequest(object: AnObject) -> Observable<Void> {
    ...
}

func storeData(data: [AnObject]) -> Observable<Void> {
    ...
}

func additionalProcessing(object: AnObject) -> Observable<Void> { 
    ...
} 

func submitData()
{
   let data: [AnObject] = ...;

   let apiOperations = data.map{ makeAPIrequest($0) };
   let storageOperation = storeData(data);
   let processingOperations = data.map{ additionalProcessing($0) };

   ... // some code to chain steps 1-3
   .subscribe { (event) -> Void in
       // should be called when operations from step 3 finished  
   }.addDisposableTo(disposeBag);
}

解决方法

假设makeAPIrequest和additionalProcessing都返回@L_607_0@Observable< SomeNotVoidType&gt ;,而storeData将@L_607_0@数组作为其参数,并返回@L_607_0@Observable< Array>.
这样,您可以执行以下操作:

首先,创建@L_607_0@Observable数组,表示将单个对象发送到后端.然后使用toObservable方法,以便稍后可以转换结果信号:

让apiOperations = data.map {makeAPIrequest($0)} .toObservable()

然后使用合并运算符,它将生成@L_607_0@Observable,只有在所有API调用完成时才会完成.您还可以使用toArray运算符,它将API调用结果放入@L_607_0@数组中:

let resultsArray = apiOperations.merge().toArray()

这将为您提供@L_607_0@Observable< Array< ApiResult>>,当所有API操作成功完成时,它将发送@L_607_0@Next事件.现在您可以将结果存储在数据库中:

let storedResults = resultsArray.flatMap { storeDatabase($0) }

然后你想再为每个数组元素创建Observable,这样它们就代表了额外的处理.请注意,您需要使用flatMap和flatMapLates,否则最终会得到嵌套的observable,如Observable< Observable< SomeType>>.

let additionalProcessingResults = storedResults.flatMap {
      return $0.map(additionalProcessing).toObservable()
    }.flatMapLatest { return $0 }

然后,您可以订阅成功完成其他处理(或者您可以对其各自的结果执行某些操作):

additionalProcessingResults.subscribe { (event) -> Void in
       // should be called when operations from step 3 finished  
   }.addDisposableTo(disposeBag);

请注意,您不需要所有中间变量,我只是让它们描述所有步骤.

大佬总结

以上是大佬教程为你收集整理的RxSwift:链接几个动作全部内容,希望文章能够帮你解决RxSwift:链接几个动作所遇到的程序开发问题。

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

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