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

当你在使用 Observable 时,如果能够直接将其他类型转换 为 Observable ,这将是非常省事的。from 操作符就提供了 这种功能。
用例
将一个数组
转换为 Observable :
let numbers = Observable.from([0,1,2,3])
numbers.subscribe { index in
print(index)
}.disposed(by: bag)
// 等价于下面的代码
let numbers1 = Observable<Int>.create { obser in
obser.onNext(0)
obser.onNext(1)
obser.onNext(2)
obser.onNext(3)
return Disposables.create()
}
numbers1.subscribe { index in
print(index)
}.disposed(by: bag)
groupBy
将源 Observable 分解为多个子 Observable ,并且每个子Observable 将源 Observable 中“相似”的元素发送出来

groupBy 操作符将源 Observable 分解为多个子Observable ,然后将这些子 Observable 发送出来。
它会将元素通过某个键进行分组,然后将分组后的元素序列 以 Observable 的形态发送出来。
用例
let numbers = Observable
.from([0,1,2,3])
.groupBy { element in
element / 2 == 0 ? 1 : 0
}
numbers.subscribe { event in
switch event {
case .next(let group):
group.asObservable().subscribe { event in
print("groupkey: \(group.key) \(event)")
}.disposed(by: self.bag)
default:
print("")
}
}.disposed(by: bag)
输出结果
groupkey: true next(0)
groupkey: true next(1)
groupkey: false next(2)
groupkey: false next(3)
groupkey: false completed
groupkey: true completed
从输出结果可以看出来,经过.groupBy
操作的Observable,在订阅的时候,经过筛选的observable其实是藏在.next
事件里面的group
里,通过group.key
取出来
ignoreElements
忽略掉所有的元素,只发出 error 或 completed 事件

ignoreElements
操作符将阻止Observable
发出next事件
,但是允许他发出 error 或 completed 事件。 如果你并不关心 Observable 的任何元素,你只想知道Observable 在什么时候终止
,那就可以使用ignoreElements
操作符。
用例
let numbers = Observable.from([1,2,3,4,5])
.ignoreElements()
numbers.subscribe { event in
switch event {
case .next(let number):
print(number)
case .error(let error):
print("error")
case .completed:
print("comleted")
default:
print("")
}
}.disposed(by: bag)
加了.ignoreElements
之后,将不再打印.next
发出的事件,如果没有错误事件,那么就只会发出completed
事件,如果注释了.ignoreElements,将是正常的打印.next发出的事件
interval
创建一个 Observable 每隔一段时间,发出一个索引数

interval 操作符将创建一个 Observable ,它每隔一段设定的 时间,发出一个索引数的元素。它将发出无数个元素。
let subject = PublishSubject<Int>.interval(.seconds(1), scheduler: MainScheduler.instance)
subject.subscribe { index in
print(index)
}.disposed(by: bag)
/// 这两种写法都是可以的
let timer = Observable<Int>.interval(.seconds(1), scheduler: MainScheduler.instance)
timer.subscribe { index in
print(index)
}.disposed(by: bag)
网友评论