RxSwift 内置了很多事件发生器, 所以你并不需要每次都是用 create 创建.
never/ empty/ just/ error
这个很特别, 是用这个工厂方法创建的可观察对象什么都不会发送, 也不会结束
Observable<String>.never().subscribe { (_) in
print("nerver print")
}.disposed(by: disposeBag)
比如这上面的这个 print 永远不会输出
你也可以自己用写一个 never
Observable<String>.create({ (observer) -> Disposable in
return Disposables.create()
}).subscribe { (_) in
print("nerver print")
}.disposed(by: disposeBag)
就像这样, 既没有任何事件, 也没有结束
------->
empty和 never 唯一的不同就是会有一个结束事件, 也不会有任何的 next 事件发出
----|--->
just 会有一个 next 事件发出, 然后就结束.
----1-|-->
error 和 empty 类似, 不过不是结束事件, 而是错误事件, 这个通常用于处理中抛出一个错误
----×--->
of/ from/ range/ repeat/generate
of 则依顺序发送多个事件, 然后再结束
from 和 of 类似, 不过 from 只有一个参数, 参数类型为序列, 内部会自动将序列拆开发送
range 则会生成一个根据起始值和重复次数, 生成一个递增序列
generate 使用一个初始值, 一个判断语句, 以及一个获取下一个值 的方式生成一个序列, 类似于C++的 for( int i = 0; i < 5; i++)
Observable.of(1, 2, 3, 4, 5).subscribe { (event) in
print(event)
}.disposed(by: disposeBag)
Observable.generate(initialState: 1, condition: {$0 <= 5}, iterate: {$0 + 1})
.subscribe { (event) in
self.print(event)
}.disposed(by: disposeBag)
---1-2-3-4-5-|-->
repeatElement
repeatElement会生成一个无尽的队列, 每次重复发送指定的数据, 一般使用 take 语句取前几个数据, 如
Observable.repeatElement(1).take(3).subscribe { (event) in
self.print(event)
}.disposed(by: disposeBag)
---1-1-1-|-->
网友评论