码迷,mamicode.com
首页 > 其他好文 > 详细

Rx 操作符四

时间:2020-04-12 07:46:17      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:sub   分组   分解   通过   let   ever   元素   ber   也会   

  • from 将其他类型或者数据结构转换为 Observable

技术图片

当你在使用 Observable 时,如果能够直接将其他类型转换为 Observable,这将是非常省事的。from 操作符就提供了这种功能。

将一个数组转换为 Observable:

let numbers = Observable.from([0, 1, 2])

它相当于:

let numbers = Observable<Int>.create { observer in
    observer.onNext(0)
    observer.onNext(1)
    observer.onNext(2)
    observer.onCompleted()
    return Disposables.create()
}

将一个可选值转换为 Observable:

let optional: Int? = 1
let value = Observable.from(optional: optional)

它相当于:

let optional: Int? = 1
let value = Observable<Int>.create { observer in
    if let element = optional {
        observer.onNext(element)
    }
    observer.onCompleted()
    return Disposables.create()
}
  • groupBy

将源 Observable 分解为多个子 Observable,并且每个子 Observable 将源 Observable 中“相似”的元素发送出来

技术图片

groupBy 操作符将源 Observable 分解为多个子 Observable,然后将这些子 Observable 发送出来。

它会将元素通过某个键进行分组,然后将分组后的元素序列以 Observable 的形态发送出来。

  • ignoreElements

忽略掉所有的元素,只发出 error 或 completed 事件

技术图片

ignoreElements 操作符将阻止 Observable 发出 next 事件,但是允许他发出 error 或 completed 事件。

如果并不关心 Observable 的任何元素,你只想知道 Observable 在什么时候终止,那就可以使用 ignoreElements 操作符。

  • interval

创建一个 Observable 每隔一段时间,发出一个索引数

技术图片

interval 操作符将创建一个 Observable,它每隔一段设定的时间,发出一个索引数的元素。它将发出无数个元素。

  • just 创建 Observable 发出唯一的一个元素

技术图片

just 操作符将某一个元素转换为 Observable。

一个序列只有唯一的元素 0:

let id = Observable.just(0)
它相当于:

let id = Observable<Int>.create { observer in
    observer.onNext(0)
    observer.onCompleted()
    return Disposables.create()
}
  • map

通过一个转换函数,将 Observable 的每个元素转换一遍

技术图片

map 操作符将源 Observable 的每个元素应用你提供的转换方法,然后返回含有转换结果的 Observable。

let disposeBag = DisposeBag() Observable.of(1, 2, 3) .map { $0 * 10 } .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) 技术图片

  • merge 将多个 Observables 合并成一个

技术图片

通过使用 merge 操作符你可以将多个 Observables 合并成一个,当某一个 Observable 发出一个元素时,他就将这个元素发出。

如果,某一个 Observable 发出一个 onError 事件,那么被合并的 Observable 也会将它发出,并且立即终止序列。

let disposeBag = DisposeBag()

let subject1 = PublishSubject() let subject2 = PublishSubject()

Observable.of(subject1, subject2) .merge() .subscribe(onNext: { print($0) }) .disposed(by: disposeBag)

subject1.onNext("???")

subject1.onNext("???")

subject2.onNext("①")

subject2.onNext("②")

subject1.onNext("??")

subject2.onNext("③")

技术图片

  • materialize

将序列产生的事件,转换成元素

技术图片

通常,一个有限的 Observable 将产生零个或者多个 onNext 事件,然后产生一个 onCompleted 或者 onError 事件。

materialize 操作符将 Observable 产生的这些事件全部转换成元素,然后发送出来。

  • never

创建一个永远不会发出元素的 Observable

never 操作符将创建一个 Observable,这个 Observable 不会产生任何事件。

创建一个不会产生任何事件的 Observable:

let id = Observable<Int>.never()

它相当于:

let id = Observable<Int>.create { observer in
    return Disposables.create()
}

Rx 操作符四

标签:sub   分组   分解   通过   let   ever   元素   ber   也会   

原文地址:https://www.cnblogs.com/liuxiaokun/p/12683339.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!