RxSwift序列转换

map

将序列每个元素转换一遍,适合于序列内的元素类型改变,比如Bool转换为String, 或者其他值的操作。
输入类型, 输出还是类型

flapMap

将序列的元素转换为其他序列, 就很适合a序列转换为b序列,比如
输入类型/序列, 输出序列

flapMapLatest

和flapMap相似,不同的是只发出最新元素

Error 序列中断

一旦序列产生一个error,整个序列将被终止,后续监听也就监听不了,也包括序列转换
Error Handling 错误事件处理

实例代码:

private func createObservable() {let subject = PublishSubject<Void>()/// 使用flatMap转换为其他序列let otherOb =  subject.asObservable().flatMapLatest({_ -> Observable<String> inprint("flatMap")return self.netRequest()})// 发出一次next, 由于没有订阅,所以没有效subject.onNext(())// 订阅subject.subscribe(onNext: { (_) inprint("发出一次事件")}).disposed(by: disposeBag)// 又发出一次事件subject.onNext(())// 订阅otherOb, 之后发出的事件都可以监听,除非序列发出Error事件otherOb.subscribe(onNext: { (value) inprint("otherSub subscribe")print(value)}).disposed(by: disposeBag)// subject 发出两次事件subject.onNext(()) // [1]如果在netRequet方法中抛出Error, 就会引起序列终止,下面一个发出事件也就无效。subject.onNext(())}// 模拟网络请求private func netRequest() -> Observable<String> {return Observable<String>.create { (observer) -> Disposable inobserver.onError(NSError(domain: "www.baidu.com", code: 30, userInfo: [:]))
//            observer.onNext("你好")
//            observer.onCompleted()return Disposables.create()}}

运行日志打印

发出一次事件
发出一次事件
flatMap
Unhandled error happened: Error Domain=www.baidu.com Code=30 "(null)"subscription called from:发出一次事件
发出一次事件

可以看到,如果网络请求抛出error [1]之后的下一次next将不会转换,同理转换出来的序列也会中断。
如果不发出Error只发出next和complete

   // 模拟网络请求private func netRequest() -> Observable<String> {return Observable<String>.create { (observer) -> Disposable inobserver.onNext("你好")observer.onCompleted()return Disposables.create()}}

打印输出

发出一次事件
发出一次事件
flatMap
otherSub subscribe
你好
发出一次事件
flatMap
otherSub subscribe
你好

可以看到,序列没有中断,对应的转换也没有中断。
总之
不要轻易发出Error事件,考虑到会不会终止序列和转换。如果需要错误提示,采用Result也许更好。

【RxSwift】flatMapLatest、 Error事件中断序列相关推荐

  1. RxSwift处理Error事件

    如何处理RxSwift的Error事件 翻译自:How to handle errors in RxSwift 在最近这些日子里,MVVM在iOS开发中变得越来约受欢迎,RxSwfit也变得越来越流行 ...

  2. 【等待事件】序列等待事件总结(enq: SQ - contention、row cache lock、DFS lock handle和enq: SV - contention)...

    [等待事件]序列等待事件总结(enq: SQ - contention.row cache lock.DFS lock handle和enq: SV - contention) [等待事件]序列等待事 ...

  3. TMS320C645x DSP SRIO寄存器(五)——LSU和其他特殊事件中断

    本文是对TI的TMS320C645x DSP SRIO User's Guide中5.21-5.24.5.28-5.31节内容的搬运 与第4章大部分内容相关 一.LSU中断 LSU中断状态寄存器(LS ...

  4. vue项目中 img标签加载失败(404)方法,@error事件

    vue项目中 img标签加载失败方法,@error事件 @error="defImg" <img src="123" @error="defIm ...

  5. RxSwift之深入解析特殊序列deallocating与deallocated的源码实现

    一.引言 在 RxSwfit 中,有两个特殊序列:deallocating 与 deallocated,deinit 等价于 dealloc.在 deallocating 与 deallocated ...

  6. STM32之中断与事件---中断与事件的区别

    这张图是一条外部中断线或外部事件线的示意图,图中信号线上划有一条斜线,旁边标志19字样的注释,表示这样的线路共有19套.图中的蓝色虚线箭头,标出了外部中断信号的传输路径,首先外部信号从编号1的芯片管脚 ...

  7. Python实现《明日方舟》干员寻访模拟器第二期:间接学习变化序列抽取目标事件和序列精确索引内容的经验

    上一期的文章我们实现了<明日方舟>干员寻访模拟器单次抽奖的功能,了解了random.choice这个函数的特点,通过原始奖池机制把等可能转化为不等可能,上一期我们还编写了一个便捷的不等可能 ...

  8. RxSwift 小记 Error Handling Operators(catchError,retry)

    (*useful)标记:目前觉得有用的函数 //FIXME 标记:待补充 ##帮助捕获错误,并可以发送消息,平滑的处理error ####catchErrorJustReturn example(&q ...

  9. 【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 )

    Android 事件分发 系列文章目录 [Android 事件分发]事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) 文章目录 ...

最新文章

  1. CSMA/CD--CSMA/CA
  2. 【内核】linux内核启动流程详细分析
  3. 【递推】P1028 数的计算
  4. 修改after样式_理解:Before和:After伪元素
  5. CanalAdapter启动过程分析(源码详解)
  6. AndroidStudio常用快捷键及其设置
  7. Python自动化运维——IP地址处理模块
  8. P3978 [TJOI2015]概率论(生成函数)
  9. 在同一台机器上启动多个JBoss A-MQ JVM
  10. mysql 相关搜索_MySQL单词搜索相关度排名
  11. 暑期训练日志----2018.8.23
  12. 寻找电路布线最短路径算法BFS
  13. 【IOS捷径】获取时间戳
  14. java手写-txt大文本分割
  15. Web全栈~02.表单样式设计
  16. android地图旋转监听,ArcGIS for Android示例解析之地图旋转-----MapRotation
  17. TokenGazer《一问到底》| 第55期:研究员 VS Dimension
  18. Lowest, highest?
  19. 声学感知刻度(mel scale、Bark scale、ERB)与声学特征提取(MFCC、BFCC、GFCC)
  20. 四级恋练有词课程 (10课时-朱伟)1.Unit1A单词识记(上)

热门文章

  1. Snackbar源码分析
  2. Web应用中的缓存一致性问题
  3. Retrofit的动态代理
  4. shell脚本编写乘法口诀
  5. 关于dataTables 的排序问题
  6. 一句white-space:nowrap解决IE6,IE7下浮动元素不自动换行
  7. ip classless作用
  8. ACCP学习旅程之----- 使用HTML语言开发商业站点(第一章 HTML的基本标签)
  9. Delphi 的消息机制浅探三
  10. IBM 365服务器安装serverraid-7k控制器